首页 文章

使用group by的MongoDB查询

提问于
浏览
0

我想在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}}]}]}}]);

但它失败了 .

(顺便说一句:我可以通过检查两个unixtimestamp之间的范围来搜索两个unixtimestamp吗?(就像上面的例子中我想搜索1262300400和1264978800之间的时间)

1 回答

  • 1

    您需要使用 aggregate 方法而不是 find 来执行此操作,并且您不需要在 $match 中使用所有 $and 运算符,因为这些字段是自然进行AND运算的 . 并将 $match 操作放在首位,这样您就不会使用更多的文档 .

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

相关问题