MongoDB-在node.js中使用多个$elemMatch操作符更新多级子文档
我是MongoDB的新手,所以请饶了我吧!我有一个如下所示的模式:MongoDB-在node.js中使用多个$elemMatch操作符更新多级子文档,node.js,mongodb,Node.js,Mongodb,我是MongoDB的新手,所以请饶了我吧!我有一个如下所示的模式: { "hour": 0, "minutes": [ { "minute": 0, "minuteVolume": 0, "seconds": [ { "second": 0, "secondVolume": 0
{
"hour": 0,
"minutes": [
{
"minute": 0,
"minuteVolume": 0,
"seconds": [
{
"second": 0,
"secondVolume": 0
},
{
"second": 1,
"secondVolume": 0
}
},
{
"minute": 22,
"minuteVolume": 0,
"seconds": [
{
"second": 0,
"secondVolume": 0
},
{
"second": 1,
"secondVolume": 0
}
}],
"hourVolume": 0
}
我正在尝试更新特定的“secondVolume”
和“minuteVolume”
。我尝试了以下方法:
collection.update({"hour": hour,
"minutes": {$elemMatch: {"minute": minute}},
"minutes.seconds": {$elemMatch: {"second": second}}},
{ $inc: {hourVolume: 1, "minutes.$.minuteVolume": 1, "minutes.$.minuteVolume.seconds.$.second": 1}
},
{upsert:false,safe:true},
function(err,data){
if (err){
console.log(err);
}
else
{
console.log(data);
}
}
);
- 但我显然做错了什么。如果我删除
中的$elemMatch
并只尝试更新“second”
,它就可以正常工作。这使我相信我的位置运算符有问题,或者我的查询没有正确地展开文档中的“minuteVolume”
提前多谢 看来你可以告诉我和240位投票支持这项功能的人。 如果知道元素的位置(可能先查询文档),则可以使用位置运算符而不是$elemMatch进行更新
{ $inc: {hourVolume: 1, "minutes.0.minuteVolume": 1, "minutes.0.minuteVolume.seconds.2.second": 1 }
我不得不重做几个模式以防止多重嵌套,因此允许一次更新。Hi Will。这正是我想要的。我最终使用位置操作符构建了一个$inc对象,因为我确实知道元素的位置。你救了我!谢谢,凯文