我对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"
和"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
的{{1}}并且只尝试更新"second"
,那么它的工作方式就是groovy。这让我相信我对位置操作符做错了,或者我的查询没有正确展开文档。在MongoDB中使用单个查询是否可以实现这一点?我使用mongodb驱动程序版本1.4.19。
提前多多感谢!
答案 0 :(得分:2)
看起来你可以和我投票支持这个功能的240人。 https://jira.mongodb.org/browse/SERVER-831
如果您知道元素的位置(可能首先查询文档),您可以使用位置运算符而不是使用$ elemMatch来更新。
{ $inc: {hourVolume: 1, "minutes.0.minuteVolume": 1, "minutes.0.minuteVolume.seconds.2.second": 1 }
我不得不重做几个模式来防止多嵌套,因此允许一次更新。