2015-06-22 3 views
0

Все в этом вопросе: я не найти эффективный способ вернуть первый и два последних документов моего запроса ...запрашивая N нововведений и М последние документы в Монго

Я прохожу в параметрах и массив, содержащий требуемый _id, который я выбираю с помощью { parentPost: { $in: myArray } }, но я не понимаю, как получить оба последних и первый документ в том же запросе ...

Целью было бы вернуть коллекцию документов, содержащих все нужные сообщения каждого потока (идентифицированные parentPost) в одном запросе, который я могу вернуть в одной подписке.

Может ли кто-нибудь осветить мой путь?

Спасибо

Давида

+0

Думаю, вам нужно будет использовать два отдельных запроса для этого. Сортировка необходима для ограничения смысла. –

ответ

0

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

c = db.foo.find({"name": "matt"}).sort({"post":1}).limit(N); 
c.forEach(function(r) { printjson(r); }); 
c = db.foo.find({"name": "matt"}).sort({"post":-1}).limit(M); 
c.forEach(function(r) { printjson(r); }); 

Конечно, если у вас нет Сортируемой вещи, просто идти на основе естественного порядка на диске:

c = db.foo.find({"name": "matt"}).sort({"$natural":1}).limit(N); 
c.forEach(function(r) { printjson(r); }); 
c = db.foo.find({"name": "matt"}).sort({"$natural":-1}).limit(M); 
c.forEach(function(r) { printjson(r); }); 

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

n = db.foo.find({"name": "matt"}).count(); 
c = db.foo.find({ 
    "name": "matt", 
    "$or": [ 
     {"post": {$lte: N}} 
     ,{"post": {$gte: n-M}} 
      ] 
    }); 
+0

Проблема в том, что, поскольку я хочу, чтобы все эти документы были возвращены в функцию публикации и доступны в одной коллекции на стороне клиента, я думаю, что я могу только вернуть курсор из одного запроса, чтобы иметь дело с моей клиентской частью коллекции? Как я мог это сделать? –

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