2012-06-01 4 views
3

Я использую драйвер Node.js для MongoDB и не создаю проблем с созданием объектов запроса за пределами вызова find(), пока не попытаюсь ввести конструкцию $or в микс.Генерация запросов динамического mongodb с драйвером Node.js

Я пытаюсь динамически генерировать запрос, потому что у меня есть переменное количество параметров и предпочел бы, чтобы у НЕ было столько вызовов в collection.find, как у меня есть параметры.

Для этого я использую запрос просто:

var query = {}; 
query['name'] = 'Steve'; 
query['date_created'] = '<some date>'; 

mongo_collection.find(query, function(err, c) {}); 

Однако, когда я пытаюсь использовать $ или весь процесс разваливается.

Я попытался каждый из следующих не радость:

var query = {}; 

1.

query[$or] = [ { 'field' : 'value1' }, { 'field' : 'value2' } ]; 
query['date_created'] = '<some date>'; 

2.

query = { $or : [ { 'field' : 'value1' }, { 'field' : 'value2' } ] }; 
query['date_created'] = '<some date>'; 

3.

query = eval("[ { 'field' : 'value1' }, { 'field' : 'value2' } ]"); 
query['date_created'] = '<some date>'; 

В каждом случае $or завернут в кавычки (честно говоря, я не уверен, что это проблема или нет ...), и запрос завершается с ошибкой.

Есть ли способ сделать это?

+0

это бросает ошибку или это просто не возвращает никаких данных? – c0deNinja

ответ

10

Вот как вы можете это сделать (есть, вероятно, несколько способов):

var query = {}; 

query["$or"]=[]; 
query["$or"].push({"field":"value1"}); 
query["$or"].push({"field":"value2"}); 
query["date_created"]="whatever"; 

query 
{ 
    "$or" : [ 
     { 
      "field" : "value1" 
     }, 
     { 
      "field" : "value2" 
     } 
    ], 
    "date_created" : "whatever" 
} 

Теперь вы должны быть в состоянии запустить db.collection.find (запрос)

Смежные вопросы