我按照以下方式创建玩家。
Players.insert({
name: name,
score: 0,
items: [{'name': 0}, {'name2': 0}...]
});
如何增加特定玩家和特定项目名称的分数(如果需要,可以继续)?
抱歉可怕的措辞:p
答案 0 :(得分:3)
嗯,答案是 - 就像在生活中一样 - 通过分解来简化问题。
为了避免mongoDB中的数组 - 毕竟,对象可以拥有任意数量的键。所以,我的结构变成了:
{
"_id": <id>,
"name": <name>,
"score": <score>,
"items": {}
}
并在items
中增加动态密钥:
// create your update skeleton first
var ud = { $inc: {} };
// fill it in
ud.$inc['item.' + key] = value;
// call it
db.Players.update(player, ud, true);
运作魅力:)
答案 1 :(得分:0)
让我们说:
{
"_id" : ObjectId("5465332e6c3e2eeb66ef3683"),
"name" : "Alex",
"score" : 0,
"items" : [
{
"food" : 0
}
]
}
要进行更新,您可以执行以下操作:
db.Players.update({name: "Alex", "items.food": {$exists : true}},
{$inc: {score: 1, "items.$.food": 5}})
结果:
{
"_id" : ObjectId("5465332e6c3e2eeb66ef3683"),
"name" : "Alex",
"score" : 1,
"items" : [
{
"food" : 5
}
]
}
由于更新阵列所需的位置操作符,如果文档不存在,我不确定您是否可以插入。