我每次用户选择标签时都会尝试增加c
。
我的示例数据集有两个嵌套数组:
{
"id": 123,
"labels": [
{
"label": "orange",
"hitCount": 2,
"hits": [
{
"who": "bob",
"c": "2"
}
]
},
{
"label": "red",
"hitCount": 6,
"hits": [
{
"who": "bob",
"c": "5"
},
{
"who": "alice",
"c": "1"
}
]
}
]
}
例如bob
再次选择red
,因此我想将红色对象内的bob对象内的c
从5增加到6。
我无法$
两次使用https://docs.mongodb.com/manual/reference/operator/update/positional/#nested-arrays
所以任何人都知道如何遍历多个级别的数组并获取$inc
的引用?
答案 0 :(得分:0)
我建议您将数据模型更改为:
{
"id": 123,
"labels": [
{
"label": "orange",
"hitCount": 2,
"hits": {
"bob": 2
}
},
{
"label": "red",
"hitCount": 6,
"hits": {
"bob":5,
"alice":1
}
}
]
}
然后你可以使用这个命令更新命中:
db.hits.update(
{ 'labels.label': 'red' },
{ '$inc': { 'labels.$.hitCount': 1, 'labels.$.hits.bob': 1 } }
);
如果您需要使用动态用户名构建更新,则可以执行此操作:
var userName = 'bob';
var updateCommand = {
$inc: {
'labels.$.hitCount': 1
}
};
updateCommand.$inc['labels.$.hits.' + userName] = 1;
db.hits.update({ 'labels.label': 'red' }, updateCommand);