我想在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时间戳吗?在上面的示例中,我尝试搜索1262300400
和1264978800
答案 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"}}}
]);