mongodb:根据日期对数据执行操作

时间:2018-08-06 11:43:47

标签: javascript mongodb mongoose mongodb-query

这是一个示例JSON对象,其中有1000个类似的对象,存储在我的MongoDB集合中。

{
  "_id": ObjectId("5b1bb74ffc7ee601c6915939"),
  "groupId": "-abcde",
  "applicationId": "avcvcvc",
  "integration": "web",
  "Category": "message",
  "Action": "message",
  "Type": "newMessage",
  "Id": "activity",
  "data": {
    "test": "good morning"
  },
  "timestamp": 1528543055858.0,
  "createdAt": ISODate("2018-06-09T11:17:35.868+0000"),
  "updatedAt": ISODate("2018-06-09T11:17:35.868+0000"),
  "__v": NumberInt(0)
}

这是我根据日期获取数据的查询

db.collection.find({"createdAt" : { $gte : new ISODate("2018-06-09T11:17:35.868+0000") }});

这是我需要对从获取数据acc中接收到的JSON对象执行的一项操作。到目前为止

db.collection.aggregate( [
  { $match: { $or: [ { Type:"on mouse hover click" },{Type:"on mouse out"},
                     {Type : "on chat start"},{Type :"Load Event"}
                     ] } },
  { $group: { _id:null , count: { $sum: 1 } } }
] );

有什么方法可以使这两个操作在单个查询中执行,而不是获取数据访问权限。到目前为止,先执行聚合,然后再进行聚合?我是MongoDB的新手,所以我不太清楚该怎么做。

1 个答案:

答案 0 :(得分:0)

您可以$match作为聚合期间的时间戳:

 db.collection.aggregate( [
   { $match: { "createdAt" : { $gte : new ISODate("2018-06-09T11:17:35.868+0000") }}},
   { $match: { $or: [ { Type:"on mouse hover click" },{Type:"on mouse out"}, {Type : "on chat start"},{Type :"Load Event"} ] } },
   { $group: { _id:null , count: { $sum: 1 } } }
 ]);