2012-12-01 4 views
5

Sto lavorando su un'app nodejs/express con Mongodb sul backend. In una delle mie chiamate API, a seconda della presenza di un particolare parametro querystring o dell'altro, desidero inviare una query a Mongodb con $ gt o $ lt.Query dinamiche in MongoDB e Node.js

In alcuni casi vogliamo chiedere tutto meno che il tokenId utilizzando $ lt, ma in altri casi ci vogliono tutto superiore alla tokenId utilizzando $ gt. Come lo facciamo senza duplicare le domande? ci

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

è un modo per creare dinamicamente la query senza fare 2 query diverse:

Ecco un esempio di query?

risposta

15

Costruisci il tuo oggetto query a livello di codice:

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

Aggiornamento

Ora che Node.js 4+ supporta computed property names, è possibile creare query in un solo passaggio come:

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

Il codice sopra potrebbe non funzionare. La precedente query dinamica verrà risolta con il seguente Ex. Token è un numero intero 35.

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

conseguente errore

la sintassi corretta dovrebbe essere:

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

Il doppio "" virgolette non dovrebbe essere lì.

+0

Benvenuti in SO. Il tuo post dovrebbe essere un commento o forse una modifica, non una risposta. O se sei ancora bloccato, si prega di inviare una nuova domanda. –