2015-04-05 2 views
0

мне интересно, если это возможно сделать с Монго/Meteor:Метеор Mongo коллекция несколько запросов

Я коллекции, и документы все включено поле createdAt и поле состояния (истина/ложь логическое) , Я хочу, чтобы показать пользователям эту коллекцию в списке, но только с документами, которые соответствуют:

if status is false AND if status is true only those before 14 days ago.

Я могу фильтровать список на основе двух полей, как я хочу отдельно в моем шаблоне помощник, но как я объединить оба ограничения вместе в одну коллекцию на стороне клиента?


Update: так что я думаю, что я искал or заявление, как Патрик упоминается, однако это не похоже на работу.

var date = new Date(+new Date - 12096e5); 
    return Things.find({$and: [ 
     { $or : [ { status : false } ] }, 
     { $or : [ { status : true } , { createdAt: {"$gte": date} } ] } 
    ]}, 
     {sort:{createdAt:-1}}); 

Doh, я and и or назад! Я хочу, чтобы элементы, соответствующие одному из двух, и условия возвращались обратно, и, похоже, работает.

var date = new Date(+new Date - 12096e5); 
    return Things.find({$or: [ 
     { $and : [ { status : false } ] }, 
     { $and : [ { status : true } , { createdAt: {"$gte": date} } ] } 
    ]}, 
     {sort:{createdAt:-1}}); 
+2

Вы не имеете в виду «OR» здесь? Вы ищете объединение этих двух утверждений, не так ли? –

+0

Да, я думаю, что я ищу '' или '...' false'' или '' true в течение последних 14 дней' – loken

+0

Ваше решение выглядит корректно, за исключением двух точек: вам не нужны '$ и' s и Я думаю, что вы можете иметь в виду '$ lte', если вам нужна дата до 14 дней. –

ответ

2

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

var date = new Date(+new Date - 12096e5); 
    return Things.find({$or: [ 
     { status : false }, 
     { status : true , createdAt: {"$gte": date} } 
    ]}, 
     {sort:{createdAt:-1}}); 
Смежные вопросы