使用group by进行MongoDB查询

时间:2012-12-30 17:03:26

标签: sql mongodb group-by

我想在mongodb中运行一个如下所示的查询(在SQL中)。输出应存储在游标中。

SELECT ipv4 src, SUM(flags) 
FROM table 
WHERE starttime > 1262300400 AND endtime < y AND port dst = 22 
GROUP BY ipv4, src

我看了http://docs.mongodb.org/manual/reference/aggregation/group/

并尝试了

myCursor = db.mycol.find(  [  
  {$group:{ _id: "$src",total:{$sum:"$flags"}}},
  {$match:{$and:[{"dst":22},
          {$and:[{"starttime":{$gt:1262300400}},{"endtime":{$lt:1264978800}}]}]}  
  }  ]);

但失败了。

BTW:我可以通过检查两者之间的范围来搜索两个unix时间戳吗?在上面的示例中,我尝试搜索12623004001264978800

之间的时间

1 个答案:

答案 0 :(得分:1)

您需要使用aggregate方法而不是find来执行此操作,并且您不需要将$and中的所有$match运算符用作字段是自然而然的。并首先执行$match操作,这样您就不会$group使用比您需要的更多的文档。

db.mycol.aggregate([
    {$match:{"dst":22, "starttime":{$gt:1262300400}, "endtime":{$lt:1264978800}}},
    {$group:{ _id:"$src", total:{$sum:"$flags"}}}
]);
相关问题