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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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--$or对$match聚合器的操作返回;管道阶段规范对象必须仅包含一个字段;_Node.js_Mongodb - Fatal编程技术网

MongoDB-Node.js--$or对$match聚合器的操作返回;管道阶段规范对象必须仅包含一个字段;

MongoDB-Node.js--$or对$match聚合器的操作返回;管道阶段规范对象必须仅包含一个字段;,node.js,mongodb,Node.js,Mongodb,我正在尝试使用Node.js的本机mongodb驱动器执行以下操作: db.collection('myColec').aggregate([ { $match:{ /*$or:[{name:"adam"},{channel:"steve"}]*/ 'name': {$in: ['adam','steve']} }, $grou

我正在尝试使用Node.js的本机mongodb驱动器执行以下操作:

db.collection('myColec').aggregate([
        {
            $match:{
                /*$or:[{name:"adam"},{channel:"steve"}]*/
                'name': {$in: ['adam','steve']}
                     },
            $group: {
                //_id: "$notes",
                _id: {channel: "$name",name:"$age"},
                earnings: {$sum: "$earnings"},
                years: {$sum: "$years"},
                years: {$sum: "$years"}
            }   
       }],
function(err,res){
    if(err){console.log(err)}
    //do something
}
根据本文件:


我应该能够完成这样的事情

您应该传递对象数组。那里的每个对象描述一个操作($match、$group等)。但只传递一个对象的数组。这个对象包含多个字段。这是不正确的

因此,请尝试这样编写查询:

db.collection('myColec').aggregate(
        [{
          $match:
                /*$or:[{name:"adam"},{channel:"steve"}]*/
                'name': {$in: ['adam','steve']}

        },
        { 
          $group: {
                //_id: "$notes",
                _id: {channel: "$name",name:"$age"},
                earnings: {$sum: "$earnings"},
                years: {$sum: "$years"},
                years: {$sum: "$years"}

        }],
function(err,res){
    if(err){console.log(err)}
    //do something
})
UPD: 也可以将这些对象作为单独的参数传递。不需要将它们包装在数组中。还有一个例子:

db.collection('myColec').aggregate(
        {
          $match:
                /*$or:[{name:"adam"},{channel:"steve"}]*/
                'name': {$in: ['adam','steve']}

        },
        { 
          $group: {
                //_id: "$notes",
                _id: {channel: "$name",name:"$age"},
                earnings: {$sum: "$earnings"},
                years: {$sum: "$years"},
                years: {$sum: "$years"}

        },
function(err,res){
    if(err){console.log(err)}
    //do something
})

查看文档。它非常有用,并包含许多示例:

我的代码如下所示-出于某种原因,我不必传递数组

db.collection('myColec').aggregate(
   {$match:{'name':{$in:['adam','steve']}}},

    {$group: {
            _id: {age:"$age"},
            earnings: {$sum: "$earnings"},
            views: {$sum: "$years"},
            adViews: {$sum: "$years"}
        }   
    }, function(err,res){
        //do something
    })

您使用的mongo客户端是什么?我想您只需要将$match用引号括起来,如“$match”:我正在使用node.js的mongodb模块。将$match用引号括起来会返回相同的结果谢谢!我最终不需要通过数组,我将发布我的答案。是的。也可以将这些对象作为单独的参数传递。不需要将它们包装在数组中。