2012-02-28 10 views
0

以下は、outputsというコレクションの1つのレコードです。効率的なmongodbクエリを使用して、10K +レコードのコレクションの平均時間を検索しますか?

db.outputs.findOne() 
{ 
    "_id" : ObjectId("4e4131e8c7908d3eb5000002"), 
    "company" : "West Edmonton Mall", 
    "country" : "Canada", 
    "created_at" : ISODate("2011-08-09T13:11:04Z"), 
    "started_at" : ISODate("2011-08-09T11:11:04Z"), 
    "end_at" : ISODate("2011-08-09T13:09:04Z") 
} 

上記は単なるドキュメントです。約10K個のドキュメントがあり、今後も増加する予定です。

私が必要とするのは、過去1週間(created_atを使って)の平均時間(started_atとend_atを取る)を見つけることです。

答えて

1

今では、必要なフィールド(starts_atとend_at)のみを選択し、アプリケーションコードで計算する可能性のある平均化する必要があるドキュメントをクエリする必要があります。

次のメジャーバージョンのMongoDBを待っている場合は、ドキュメントのクエリ、フィールドの選択、計算の実行、最終的には計算された値の返信用の集約パイプラインを構築できる新しい集計フレームワークが用意されています(s)。とても良いですね。

https://www.mongodb.org/display/DOCS/Aggregation+Framework

0

あなたは週を表し_idの値が$ INC演算子を使用して別のコレクション内の合計とカウントを維持することができます。そうすれば、10kレコードすべてを照会する必要はありません。あなたは単にコレクションmantaining合計&カウントを照会し、平均を得るために合計でカウントを除算することができます。

私は次の記事でこれを詳細に説明しています

http://samarthbhargava.wordpress.com/2012/02/01/real-time-analytics-with-mongodb/