2014-01-30 1 views
3

Мне нужно запросить документы для учетной записи, у которой либо нет истечения срока действия [истекает] (не существует), либо срок годности истекает после 2/2/14. Чтобы сделать это, мой MongoDB запрос:

db.events.find({ _account: ObjectId("XXXX"), 
    $or: [ 
     {expires: {$gt: ISODate('2014-02-02')}}, 
     {expires: {$exists: false}} 
    ] 
}); 

У меня возникли проблемы с правильным мангустом .or().and().exists() цепными, как бы я преобразовать это в мангуст?

Спасибо!

ответ

7

Нельзя использовать неправильный синтаксис, более или менее такой же, как в оболочке. Это все еще javascript, просто без помощников оболочки.

Events.find({ _account: "XXXX", 
    $or: [ 
    {expires: {$gt: Date(2014,02,02)}}, 
    {expires: {$exists: false }} 
}, function(err, events) { 
    if (err) // TODO 
    // do something with events 
}); 

В качестве альтернативы вы используете другие помощники для создания запроса:

var query = Events.find({ _account: "XXXX" }); 

query.or(
    {expires: {$gt: Date(2014,02,02)}}, 
    {expires: {$exists: false }} 
); 

query.exec(function(err, events) { 
    if (err) // TODO 
    // do something with events 
}); 

или другие комбинации. Эти «помощники» в основном существуют в драйверах для синтаксического контроля с другими нединамическими языками, такими как Java. Вы можете искать примеры использования QueryBuilder в Java, если вы предпочитаете этот способ и не можете найти ссылки на узлы. Для мангуста есть documentation для запросов, которые стоит посмотреть.

Динамические языки имеют более собственный подход к определению таких структур объектов, которые используются для запросов и т. Д. Поэтому большинство людей предпочитает их использовать.

+0

ах, фантастический - я думал, что должен был использовать помощников и не был уверен, как «или» был реализован в сочетании с оригинальной «находкой». Я попробую это, когда вернусь в офис позже сегодня. – justin