1

次のような(SQLで)mongodbでクエリを実行したいと思います。出力はカーソルに格納する必要があります。

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

しかし、それは失敗しました。

ところで: 2 つの unix-timestamp 間の範囲をチェックするだけで検索できますか? 1262300400上記の例では、との間の時間を検索しようとしました1264978800

4

1 に答える 1

1

aggregateこれを行う代わりにメソッドを使用する必要があり、フィールドは自然に AND されるため、これらの演算子をfindすべて使用する必要はありません。そして、必要以上のドキュメントを作成しないように、操作を最優先にします。$and$match$match$group

db.mycol.aggregate([
    {$match:{"dst":22, "starttime":{$gt:1262300400}, "endtime":{$lt:1264978800}}},
    {$group:{ _id:"$src", total:{$sum:"$flags"}}}
]);
于 2012-12-30T17:22:30.110 に答える