2012-12-01 11 views
5

Pracuję nad aplikacją nodejs/express z Mongodb na zapleczu. W jednym z moich wywołań API, w zależności od obecności konkretnego parametru zapytania lub innego, chcę wysłać zapytanie do Mongodb z $ gt lub $ lt.Dynamiczne zapytania w MongoDB i Node.js

W niektórych przypadkach chcemy prosić o wszystko mniej niż tokenId używając $ lt, ale w innych przypadkach chcemy wszystko większe niż tokenId używając $ gt. Jak to zrobić bez duplikowania zapytań?

Oto przykład zapytania:

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

Czy istnieje sposób dynamicznie utworzyć kwerendę bez faktycznie robi 2 różne pytania?

Odpowiedz

15

Zbuduj swój obiekt kwerendy programowo:

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

Aktualizacja

Teraz, node.js 4+ obsługuje computed property names można tworzyć query w jednym kroku jak:

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

Powyższy kod może nie działać. Powyższe zapytanie dynamiczne zostanie rozwiązane zgodnie z Ex. Token jest liczbą całkowitą 35.

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

powodując błąd

Poprawna składnia powinna być:

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

Podwójna "" cytaty nie powinno tam być.

+0

Witamy w SO. Twój post powinien być komentarzem lub ewentualnie zmianą, a nie odpowiedzią. Lub, jeśli nadal utknąłeś, opublikuj nowe pytanie. –

Powiązane problemy