2012-12-01 2 views
5

Arka sayfada Mongodb ile bir nodejs/express uygulaması üzerinde çalışıyorum. API çağrılarımdan birinde, belirli bir querystring parametresinin varlığına bağlı olarak veya diğer bir Mongodb'a bir $ gt veya $ lt. Biz tokenId kullanarak $ lt daha az her şey için sormak istiyorum Bazı durumlarda MongoDB ve Node.js dinamik sorguları

fakat diğer durumlarda biz $ gt tokenId daha büyük her şeyi istiyorum. Sorguları çoğaltmadan bunu nasıl yaparız?

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

dinamik aslında 2 farklı sorgular yapmadan sorgusu oluşturmak için bir yol var mı:

İşte bir örnek sorgu var?

cevap

15

programlı sorgu nesnesi oluşturun:

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

Şimdi

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); 

Güncelleme node.js 4+ computed property names desteklediğini, siz tek adımda query oluşturabilir

Yukarıdaki kod çalışmayabilir. Yukarıdaki dinamik sorgu, Ex.

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

"çift" tırnak olmamalı: Token doğru sözdizimi olmalıdır Hata

sonuçlanan bir tamsayı 35.

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

olduğunu.

+0

SO. Gönderiniz bir yorum veya bir düzenleme olmalı, bir cevap değil. Ya da hala takılırsanız, lütfen yeni bir soru gönderin. –

İlgili konular