我对 MongoDB 很陌生,所以请怜悯我!我有一个如下所示的架构:
{
"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”
和“一分钟卷”
。我尝试过以下方法:
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);
}
}
);
- 但我显然做错了什么。如果我删除
"second"
的$elemMatch
并仅尝试更新"minuteVolume"
,它就可以正常工作。这让我相信我在位置运算符上做错了什么,或者我的查询没有正确展开文档。
这甚至可以通过 MongoDB 中的单个查询实现吗?我使用的是 mongodb 驱动程序版本 1.4.19。
提前非常感谢!
最佳答案
看来你可以我以及为该功能投票的 240 人。 https://jira.mongodb.org/browse/SERVER-831
如果您知道元素的位置(可能通过首先查询文档),您可以使用位置运算符而不是使用 $elemMatch 进行更新。
{ $inc: {hourVolume: 1, "minutes.0.minuteVolume": 1, "minutes.0.minuteVolume.seconds.2.second": 1 }
我必须重做多个架构以防止多重嵌套,从而允许一次性更新。
关于node.js - MongoDB - 在 node.js 中使用多个 $elemMatch 运算符更新多个级别的子文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26850030/