0

MongoDB クエリでこのようなことを行うことは可能ですか (MongooseJS も使用しています)。

lodashでは、これを行うことができます

var characters = [
  { 'name': 'barney',  'age': 36, 'blocked': false },
  { 'name': 'fred',    'age': 40, 'blocked': true },
  { 'name': 'pebbles', 'age': 1,  'blocked': false }
];

_.find(characters, function(chr) {
  // Do any kind of logic and ultimately return a boolean.
  return chr.age - 10 > 24;
}); // returns barney and fred

組み込みのmongoドライバーまたはmongoosejsでこのようなことを行うことはできますか? 多くのオブジェクトが存在する可能性があるため、すべてのオブジェクトを読み取ってこのように反復処理するのは避けたいと思います。私はmongoが私のためにこれを行うことを好みます。

ありがとう!

4

2 に答える 2

1

パフォーマンス上の理由からお勧めしませんが (すべてのドキュメントを反復処理し、インデックスを使用できずに JavaScript を実行する必要があるため)、$where演算子 ( reference ) を使用してカスタム JavaScript コードを実行できます。

db.theCollection.find({ $where : "this.age - 10 > 24" })

$where(そして、そのクエリは:を使用せずに処理できるため、実際のロジックはより複雑になると思いますfind({age: { $gt : 24 }})。可能であれば、組み込みのクエリ演算子を使用してみてください。一般的にはより効率的であり、フィールド インデックスを利用する方が簡単な場合が多いためです。

于 2013-12-01T16:32:39.187 に答える
-1

Lo-Dash は要素を繰り返し処理し、それぞれをコールバックに渡します。簡単にはできないようです。コールバック関数で条件を認識 (解析) できる非常に洗練されたものを作成し、それらを使用してインデックスとフィルター レコードを使用する必要があります。

MongoDB にはそのようなオプションはありません。

于 2013-12-01T10:36:25.223 に答える