Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB-在node.js中使用多个$elemMatch操作符更新多级子文档_Node.js_Mongodb - Fatal编程技术网

MongoDB-在node.js中使用多个$elemMatch操作符更新多级子文档

MongoDB-在node.js中使用多个$elemMatch操作符更新多级子文档,node.js,mongodb,Node.js,Mongodb,我是MongoDB的新手,所以请饶了我吧!我有一个如下所示的模式: { "hour": 0, "minutes": [ { "minute": 0, "minuteVolume": 0, "seconds": [ { "second": 0, "secondVolume": 0

我是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
    中的
    “second”
    并只尝试更新
    中的“minuteVolume”
    ,它就可以正常工作。这使我相信我的位置运算符有问题,或者我的查询没有正确地展开文档
在MongoDB中使用一个查询就可以做到这一点吗?我使用的是mongodb驱动程序版本1.4.19


提前多谢

看来你可以告诉我和240位投票支持这项功能的人。

如果知道元素的位置(可能先查询文档),则可以使用位置运算符而不是$elemMatch进行更新

{ $inc: {hourVolume: 1, "minutes.0.minuteVolume": 1, "minutes.0.minuteVolume.seconds.2.second": 1 }

我不得不重做几个模式以防止多重嵌套,因此允许一次更新。

Hi Will。这正是我想要的。我最终使用位置操作符构建了一个$inc对象,因为我确实知道元素的位置。你救了我!谢谢,凯文