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