只有在满足特定条件的情况下,才能向mongoDB文档数组添加新元素



我有这个mongoDB文档结构:

Game = {
_id: 'randomObjectId',
players: [Array of players ObjectIds],
maxPlayers: 2,
status: 'created' (or 'fully-booked')
}

当一个新玩家加入游戏时,我想将他添加到玩家阵列中,并将游戏的status更改为fully-booked,前提是满足以下条件:players.length < maxPlayers

概括一下:

  • 如果players.length < maxPlayers,则在DB内部检查(使用查询(
  • 如果是,请更新文档
  • 如果没有,则返回错误响应(可选(

如果没有此检查,很容易使用进行查询

Game.findByIdAndUpdate('randomObjectId', {
$addToSet: {
players: 'playerObjId'
},
gameStatus: 'fully-booked'
}, {
new: true
})

我不知道如何将这个条件添加到这个(或其他类型的(查询中。感谢您的帮助。感谢

您可以尝试如下聚合管道更新。但是,如果已经预订满,则该命令将返回一个null。还要注意,如果您尝试添加数组中已经存在的玩家id,则不会添加。

db.collection.findOneAndUpdate(
{
_id: someObjectId,
$expr: {
$lt: [{ $size: "$players" }, "$maxPlayers"]
}
},
[
{
$set: {
players: { $setUnion: ["$players", [newPlayerObjectId]] }
}
},
{
$set: {
status: {
$cond: {
if: { $lt: [{ $size: "$players" }, "$maxPlayers"] },
then: "created",
else: "fully-booked"
}
}
}
}
],
{
returnNewDocument: true
})

相关内容

  • 没有找到相关文章

最新更新