2011-02-01 21 views
2

私は次のようになります。Mongoのクエリを持っている:

その「スケジュール」(オブジェクトのリストである)フィールドの要素が含まれている項目のためのコレクションを検索し
{'schedule': {'$elemMatch': {'time': {'$gt': start, '$lte': end}}}} 

「時間」フィールドは開始と終了の間にあります。

mongoのインデックスがどのようにこの状況に対応しているかは不明です。このクエリが定期的に実行される場合、ベストプラクティスとは何でしょうか?

答えて

0

これは誤った構文ですが、動作するはずです。 $ elemMatchは、一致させるオブジェクト(配列内の複数のフィールド)に複数のフィールドがある場合に使用されます。 1つのフィールドで$ elemMatchは必要ありません。あなたはこれを行うべきである

{"schedule.time" : { $gt: <start>, $lte: <end> }}

それは、この場合には、複数の配列要素になりますにもかかわらず、あなたは単一のフィールドを使用していることをはるかに明確です。 "schedule.time"の索引を使用して、この照会をより効率的にすることができます。

+0

良い点。スケジュールがオブジェクトのリストではなくintのリストで、{'schedule':{'$ gt':start、 '$ lte':end}}した場合、それはうまくいくとは思えませんでした要素>開始と要素<=終わりの両方を持つが、必ずしも同じ要素である必要はないすべての項目。私はあなたのバージョンが動作していることを確認し、より明確です。ありがとうございました。 –

+0

非常にビザールな動作!これは、インデックスがschedule.time上に構築されていても、そのようなインデックスがない場合には機能しません。 –

+0

Kevin:バージョン依存の配列に対するインデックス付き/インデックスなしの範囲クエリに関連するバグがあります。最新バージョンで動作しないサンプルがある場合は、jiraの問題を作成してください:http://jira.mongodb.org/ –

関連する問題