[英]MongoDB Query with 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}}]}]}
} ]);
但是失敗了。
順便說一句:是否可以僅通過檢查兩個unix時間戳之間的范圍來進行搜索? 在上面的示例中,我嘗試搜索1262300400
和1264978800
之間的時間
您需要使用aggregate
方法而不是find
做到這一點,你不需要使用所有這些$and
運營商在$match
的領域自然與。 然后將$match
操作放在第一位,這樣您就不必在$group
上創建比所需更多的文檔。
db.mycol.aggregate([
{$match:{"dst":22, "starttime":{$gt:1262300400}, "endtime":{$lt:1264978800}}},
{$group:{ _id:"$src", total:{$sum:"$flags"}}}
]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.