如何使用聚合获取基于时间戳的值 - mongodb?

时间:2013-11-18 10:02:48

标签: mongodb

我有以下示例

mongodb文件

  {

  "request" : [
    {
        "bytesSent" : "6605",
        "bytesRecieved" : "1987",
        "currentVisit" : "1384766024",
        "lastVisit" : "1384766024"
    },
    {
        "bytesSent" : "6605",
        "bytesRecieved" : "1987",
        "currentVisit" : "1384766024",
        "lastVisit" : "1384766024"
    }
       ],
    uuid :"b90fb200-5031-11e3-9b59-2f102c87ef20-13decb4fb6fd1"
 }

我想根据上述文档中currentVisit数组中的lastVisitrequest来汇总uuid。

我想使用uuid将普通查询转换为聚合。

db.collection.find({"request.currentVisit":{$gte:"1384766024",$lte:"1384766024"}}); 

任何帮助都会很棒。

2 个答案:

答案 0 :(得分:0)

以下聚合查询效果很好。

db.collection.aggregate({$unwind:"$request"},{$match:{"request.currentVisit":{$gte:"1384766024",$lte:"1384766024"}}},{$group:{_id:"$uuid"}});

步骤

  1. 将请求数组展开到普通文档。

  2. 根据currentVisit文档中的request,使用$ match匹配时间戳字段。

  3. 使用uuid字段对文档进行分组。

答案 1 :(得分:-2)

请求字段是一个数组,所以没有request.currentVisit,试试这个:

{ request:{$elemMatch:{currentVisit:{$gte:"1384766024",$lte:"1384766024"}}} }