增加嵌套对象中的值?

时间:2012-05-06 14:37:41

标签: mongodb

本周末我正在搞乱mongodb和node.js,我在浏览有关更新嵌套对象/文档的mongodb文档方面遇到了一些麻烦。

我有一个文件看起来像这样的集合..

{
 gameName: "string",
 slug: "string",
 players: [{playerName, playerScore}, ...]
}

我正在尝试找出如何根据playerName增加playerScore的值。

我想这主要归结于我不理解NoSQL方法。我甚至想过为玩家使用数组,所以任何输入都会受到赞赏。

谢谢!

2 个答案:

答案 0 :(得分:19)

您想要的结构是:

{
 gameName: "string",
 slug: "string",
 players: [ { playerName: "string", playerScore: number} ] , ...]
}

如果他的名字是Joe,你可以使用:

将玩家得分增加1
db.collection.update( {"players.playerName":"Joe"}, { $inc : { "players.$.playerScore" : 1 } }

答案 1 :(得分:5)

我相信您必须构建您的文档,而不是

{
 gameName: "string",
 slug: "string",
 players: {playerName: {score: playerScore}},
}

然后您可以使用以下内容更新分数:

db.games.update({"gameName": "string"},
                {$inc: {"players.playerName.score": 1}
                })