Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.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
Node.js Mongo DB+;使用最后一个字段数据分组_Node.js_Mongodb_Mongodb Query_Aggregation Framework - Fatal编程技术网

Node.js Mongo DB+;使用最后一个字段数据分组

Node.js Mongo DB+;使用最后一个字段数据分组,node.js,mongodb,mongodb-query,aggregation-framework,Node.js,Mongodb,Mongodb Query,Aggregation Framework,我在集合中有示例json数据 样本数据: [{ "_id" : 1, "username" : "abcd", "createdDate" : ISODate("2016-06-03T08:52:32.434Z") }, { "_id" : 2, "username" : "abcd", "createdDate" : ISODate("2016-05-03T09:52:32.434Z") }, { "_id" : 3, "user

我在集合中有示例json数据

样本数据:

[{
    "_id" : 1,
    "username" : "abcd",
    "createdDate" : ISODate("2016-06-03T08:52:32.434Z")
},
{
    "_id" : 2,
    "username" : "abcd",
    "createdDate" : ISODate("2016-05-03T09:52:32.434Z")
},
{
    "_id" : 3,
    "username" : "abcd",
    "createdDate" : ISODate("2016-04-03T10:52:32.434Z")
},
{
    "_id" : 4,
    "username" : "xyz",
    "createdDate" : ISODate("2016-03-03T10:52:32.434Z")
},{
    "_id" : 5,
    "username" : "xyz",
    "createdDate" : ISODate("2016-02-03T10:52:32.434Z")
},{
    "_id" : 6,
    "username" : "zzz",
    "createdDate" : ISODate("2016-01-03T10:52:32.434Z")
}]
我需要检索以下条件的数据

  • 按用户名分组
  • 用户名不等于“zzz”
  • 按日期说明订单
  • 还需要日期字段(具有最新/最新记录)
  • 获取总计数
  • 预期输出:

    [{
        "username" : "abcd",
        "createdDate" : "2016-06-03T08:52:32.434Z",
            "total" : 3
    },
    {
        "username" : "xyz",
        "createdDate" : "2016-03-03T10:52:32.434Z",
            "total" : 2
    }]
    
    查询:

    db.logs.aggregate([
        { "$match": { "username": { "$ne": "zzz" } }},
    
        { "$group": {
            "_id": {
                "username": "$username",
                "createdDate": "$createdDate"
            },
            "count": { "$sum": 1 }
        }}])
    
    试试这个:

        db.logs.aggregate([
       {
          "$match":{
             "username":{
                "$ne":"zzz"
             }
          }
       },
       {
          "$group":{
             _id:"$username",
             "count":{
                "$sum":1
             },
             date:{
                $max:"$createdDate"
             }
          }
       },
       {
          $project:{
             username:"$_id",
             total:"$count",
             createdDate:"$date"
          }
       }
    ])
    
    输出

      {
       "_id":"xyz",
       "username":"xyz",
       "total":2,
       "createdDate":   ISODate("2016-03-03T10:52:32.434   Z")
    }{
       "_id":"abcd",
       "username":"abcd",
       "total":3,
       "createdDate":   ISODate("2016-06-03T08:52:32.434   Z")
    }
    

    联机试用:

    您的MongoDB版本是什么?您可能希望更改示例数据,使同一用户具有不同的创建日期。@chridam我使用的是版本3.2。4@AlexBlex-请建议。我没有道歉,我的错。没有注意到月份不同。嗨,很抱歉回复晚了。我尝试了这个查询,但出现了错误。我将我的代码附加在@RSKMR的JSFIDLE中,您使用了“db.activities.find()”而不是“db.activities.aggregate()”,所以它当然不起作用。。。在查找查询中不能使用$match和$group,只能在聚合中使用。哦,对不起,我错过了。