Вопрос:

Разница в результатах агрегирования MongoDB

mongodb nosql aggregation-framework nosql-aggregation

43 просмотра

1 ответ

563 Репутация автора

Я пытаюсь составить запрос, чтобы найти все документы в коллекции с датой <текущая дата, флаг = true, отсортировать по дате (по убыванию) и ограничить результат до (например) 10 документов, затем выбрать все оставшиеся документы (удовлетворяющие дате и условиям флага) в коллекции для обновления, которое будет выполнено. SQL-эквивалент будет:

SELECT * FROM TABLE
WHERE DATE < SYSDATE
AND FLAG = TRUE
MINUS
SELECT * FROM TABLE
WHERE DATE < SYSDATE
AND FLAG = TRUE
ORDER BY DATE DESC
LIMIT 10

Пока что у меня есть:

db.scratch.aggregate(
  [
    { $match: { flag: true, date: { $lt: new Date() } } },
    { $sort: { date: -1 } },
    { $limit: 10 }
  ]
)

Можно ли сделать вычитание в БД, или единственный вариант, который у меня есть, - обработать результаты двух запросов на стороне клиента?

Автор: asliwinski Источник Размещён: 08.11.2017 11:07

Ответы (1)


0 плюса

107929 Репутация автора

Решение

На самом деле это простой запрос, так как он MINUSпросто «исключает », и все, что вы на самом деле говорите, сводится к «исключению первых 10 результатов по этим критериям» .

db.scratch.find({ "date": { "$lt": new Date() }, "flag": true })
  .sort({ "date": -1 }).skip(10);

Таким образом, «ограничить первые 10, а затем исключить эти результаты из общего» в основном сводится к SKIP, по тем же критериям.

Автор: Neil Lunn Размещён: 08.11.2017 11:44
Вопросы из категории :
32x32