Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.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
Javascript 如何使用聚合MongoDB获取数据Mongo数据_Javascript_Angularjs_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript 如何使用聚合MongoDB获取数据Mongo数据

Javascript 如何使用聚合MongoDB获取数据Mongo数据,javascript,angularjs,node.js,mongodb,mongoose,Javascript,Angularjs,Node.js,Mongodb,Mongoose,假设我们有10个集合,那么我们必须根据tag\u id找到计数。例如,如果tag\u id包含0和1,那么我们必须计算所有数据,以及计算没有tag\u id的数据,或者tag\u id为空的数据。然后,如果它有未读:false,则输出来,计算所有未读的 查找tag_id的计数和false时未读的计数 { "_id": ObjectId("5912c7240520df77f0c2c18a"), "email_id": "54", "unread":

假设我们有10个集合,那么我们必须根据
tag\u id
找到计数。例如,如果
tag\u id
包含0和1,那么我们必须计算所有数据,以及计算没有
tag\u id
的数据,或者
tag\u id
为空的数据。然后,如果它有未读:false,则输出来,计算所有未读的

查找tag_id的计数和false时未读的计数

 {
        "_id": ObjectId("5912c7240520df77f0c2c18a"),
        "email_id": "54",
        "unread": "false",
        "__v": NumberLong(0),
        "tag_id": ["0"

        ]
    }, {
        "_id": ObjectId("5912c71e0520df77f0c2c189"),
        "email_id": "55",
        "unread": "false",
        "__v": NumberLong(0),
        "tag_id": [
            "1"
        ]
    }, {
        "_id": ObjectId("5912c71d0520df77f0c2c186"),
        "email_id": "51",
        "unread": "false",
        "__v": NumberLong(0),
        "tag_id": [
            "2", "1"
        ]
    }
预期结果:

{
    "data": [{
        "tag_id": "1",
        "count_email": 1,(count of email on the basis of tag_id)
        "unread": 9(count the unread on the basis of output of tag_id)
    }, {
        "tag_id": "3",
        "count_email": 45,
        "unread": 3
    }, {
        "tag_id": "2",
        "count_email": 5,
        "unread": 4
    }, {
        "id": null,
        "count_email": 52,
        "unread": 35
    }]
}

您可以使用下面的聚合管道

下面的查询将
$unwind
标记id,然后是
$group
以计数
电子邮件
,然后是
$cond
操作员以计数
未读的
电子邮件

db.collection.aggregate(
 {$unwind:{path:"$tag_id", preserveNullAndEmptyArrays:true}}, 
 {$group:{
    _id:"$tag_id", 
     count_email:{$sum:1},
     unread:{$sum:{$cond:[{$eq:["$unread", "false"]}, 0, 1]}}
    }
  }
);

这不清楚,预期输出与您提供的示例文档不一致。您能否更新预期的输出并添加有关您尝试实现的目标的详细信息?Mongo提供聚合、map reduce等。。。但实际上,这些操作在事务系统中无法扩展。如果是为了分析,那么有比mongo更适合的数据存储。谢谢。好啊谢谢它为我做的工作,我想再问一件事,如果我有tag_id“id”:null或没有tag_id,我想知道{“id”:null,“count_email”:52,“unread”:35}我们能在不使用$wind的情况下找到相同的输出吗,因为我使用的是mongo 3.0版本,我有很多项目使用版本3.0@Veeram,你可能不得不使用map reduce。我认为为3.0版创建单独的问题是值得的。你能告诉我如何使用3.0版吗?你也可以检查一下,我已经为此创建了一个单独的问题