0

タイムスタンプである「fieldA」と「fieldB」の2つのフィールドを持つドキュメントを持つmongoコレクションがあり、「(fieldB-fieldA)/ 6000> 2」であるすべてのドキュメントを取得する必要があります...だから私は探していましたこれを行うためにいくつかの機能のために...

いくつかの投稿で "$subtract" 関数を見ましたが、それは mongo 2.1.x にあるようで、現在 2.0.x を使用しています (これは安定版です)。2.0.x でこれを行う方法はありますか? または 新しいフィールドを作成する必要がありますか? または、アプリケーション側でのみ行うことはできますか?

ところで、私はルビーモンゴドライバーを使用しています...

4

1 に答える 1

1

$ where演算子を使用して、クエリ式をJavascriptとして指定できます。シェル内:

db.myCollection.find({$ where: "(this.fieldB --this.fieldA)/ 6000> 2"});

ただし、Javascriptの実行は非常に遅くなる可能性があることに注意してください。これが1回限りのクエリである場合、$whereは問題のない解決策である可能性があります。それ以外の場合は、方程式の結果を別のフィールドに保存することが、クエリをタイムリーに行うための最良の方法です。

$ where演算子に関する追加情報: http ://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-JavascriptExpressionsand%7B%7B%24where%7D%7D

于 2012-06-13T14:55:24.407 に答える