Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.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查询组集合按日期上周/月/所有节点_Javascript_Node.js_Mongodb - Fatal编程技术网

Javascript MongoDB查询组集合按日期上周/月/所有节点

Javascript MongoDB查询组集合按日期上周/月/所有节点,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,我需要统计所有用户,上周和上月的用户,按日期分组 我试过了 var project = { $project:{ day: { $dayOfMonth: "$updatedAt" }, month: { $month: "$updatedAt" }, year: { $year: "$updatedAt" } } }, group = { "$group": { "_id": {

我需要统计所有用户,上周和上月的用户,按日期分组

我试过了

var project = {
    $project:{
        day: { $dayOfMonth: "$updatedAt" },
        month: { $month: "$updatedAt" },
        year: { $year: "$updatedAt" }
    }
},
group = {   
    "$group": { 
        "_id": { 
            "date": "$updatedAt",
        },  
        "count" : { "$sum" : "$1" }
    }
};

db.collection.aggregate([project, group])...
我需要看起来像

{lastWeek: 12, lastMonth: 20, all: 102}
编辑 添加了示例json数据。仅包括测试对象的必要属性

[{
    "_id" : ObjectId("someId"),
    "createdAt" : ISODate("2017-04-08T09:51:44.897Z"),
    "updatedAt" : ISODate("2018-01-08T09:51:55.460Z"),
    "foo1" : null
},{
    "_id" : ObjectId("someId"),
    "createdAt" : ISODate("2017-04-08T09:51:44.897Z"),
    "updatedAt" : ISODate("2017-12-30T09:51:55.460Z"),
    "foo1" : null
},{
    "_id" : ObjectId("someId"),
    "createdAt" : ISODate("2017-04-08T09:51:44.897Z"),
    "updatedAt" : ISODate("2018-01-17T09:51:55.460Z"),
    "foo1" : null
},{
    "_id" : ObjectId("someId"),
    "createdAt" : ISODate("2017-04-08T09:51:44.897Z"),
    "updatedAt" : ISODate("2018-01-01T09:51:55.460Z"),
    "foo1" : null
},{
    "_id" : ObjectId("someId"),
    "createdAt" : ISODate("2017-04-08T09:51:44.897Z"),
    "updatedAt" : ISODate("2017-04-08T09:51:55.460Z"),
    "foo1" : null
}]

你可以在下面试试

var today = new Date();
var lastWeek = new Date();
today.setDate(today.getDate() - 7);
var lastMonthFromToday = new Date();
lastMonthFromToday.setMonth(today.getMonth() - 1);

db.col.aggregate(
{"$group":{
    "_id":null,
    "lastWeek":{"$sum":{"$cond":[{$and:[{"$gte":["$updatedAt",lastWeek]}, {"$lte":["$updatedAt",today]}]}, 1, 0]}},
    "lastMonth":{"$sum":{"$cond":[{$and:[{"$gte":["$updatedAt",lastMonthFromToday]}, {"$lte":["$updatedAt",today]}]}, 1, 0]}},
    "all":{"$sum":1}
}})
Mongo 3.4版本:

db.col.aggregate(
{"$facet":{
  "lastWeek":[{"$match":{"updatedAt":{"$gte":lastWeek, "$lte":today}}},{"$count":"count"}],
  "lastMonth":[{"$match":{"updatedAt":{"$gte":lastMonthFromToday, "$lte":today}}},{"$count":"count"}],
  "all":[{"$count":"count"}]
}})

你可以在下面试试

var today = new Date();
var lastWeek = new Date();
today.setDate(today.getDate() - 7);
var lastMonthFromToday = new Date();
lastMonthFromToday.setMonth(today.getMonth() - 1);

db.col.aggregate(
{"$group":{
    "_id":null,
    "lastWeek":{"$sum":{"$cond":[{$and:[{"$gte":["$updatedAt",lastWeek]}, {"$lte":["$updatedAt",today]}]}, 1, 0]}},
    "lastMonth":{"$sum":{"$cond":[{$and:[{"$gte":["$updatedAt",lastMonthFromToday]}, {"$lte":["$updatedAt",today]}]}, 1, 0]}},
    "all":{"$sum":1}
}})
Mongo 3.4版本:

db.col.aggregate(
{"$facet":{
  "lastWeek":[{"$match":{"updatedAt":{"$gte":lastWeek, "$lte":today}}},{"$count":"count"}],
  "lastMonth":[{"$match":{"updatedAt":{"$gte":lastMonthFromToday, "$lte":today}}},{"$count":"count"}],
  "all":[{"$count":"count"}]
}})

工作顺利,故障就在我身边,nvm。谢谢你的帮助,非常感谢!工作顺利,故障就在我身边,nvm。谢谢你的帮助,非常感谢!