2012-12-01 18 views
5

私はバックエンドでMongodbを使ってnodejs/expressアプリケーションを開発しています。私のAPI呼び出しの1つでは、特定のクエリーストリング・パラメーターの存在に依存して、または他のものは、$ gtまたは$ ltのいずれかを使用してMongodbに照会を出したいとします。MongoDBとNode.jsの動的クエリ

場合によっては$ ltを使用してtokenIdより少ないものをすべて尋ねることもありますが、それ以外の場合は$ gtを使用してtokenIdより大きいものをすべて欲しい場合もあります。どのように我々はクエリを複製せずにそれを行うのですか?ここで

は、クエリの例です:

collection.find({'film_id': {$in : genre}, '_id': {$lt: tokenId}}).sort({'_id': -1}).limit(25).toArray(function(error, films) 

を動的に実際に2つの異なるクエリを実行せずにクエリを作成する方法はありますか?

答えて

15

プログラムでクエリオブジェクトを構築します。

var query = { 
    film_id: {$in: genre}, 
    _id: {[param ? '$lt' : '$gt']: tokenId} 
}; 
0

var query = {'film_id': {$in : genre}}; 
if (param) { 
    query._id = {$lt: tokenId}; 
} else { 
    query._id = {$gt: tokenId}; 
} 
collection.find(query).sort({'_id': -1}).limit(25).toArray(function(error, films); 

更新のNode.js 4+がcomputed property namesをサポートしていることを、あなたにワンステップでqueryを作成することができます

上記のコードは機能しない可能性があります。上記の動的クエリは次の例に解決されます。トークンはエラーに

を結果として35

collection.find("_id":"{$gt: 35}") 
      .sort({'_id': -1}).limit(25).toArray(function(error, films); 

整数で正しい構文は次のようになります。

collection.find("_id":{$gt: 35}). 

「」二重引用符があってはなりません。

+0

ようこそ。投稿はコメントでなければならず、編集ではなく、回答でなければなりません。または、あなたがまだ立ち往生している場合は、新しい質問を投稿してください。 –