Обновить n элементов, имеющих максимальные значения - PullRequest
1 голос
/ 04 ноября 2019

Я хочу реализовать мягкое удаление в коллекции dong Монго (полное удаление выполняется один раз в день в рамках определенного процесса). Мое приложение может перечислить все активные элементы коллекции + N самых последних удаленных элементов.

Моя идея заключалась в добавлении флага to_delete в мои элементы: при удалении элемента

  • установить deletion_date на текущую дату
  • установить to_delete: true для удаленных элементов, кроме 5 самых последних (имеющих наибольшее значение deleting_date)

Таким образом, мойлистинг и жесткое удаление легко реализовать:

  • листинг - это простой запрос, возвращающий все элементы, имеющие to_delete=false
  • hard delete - простой запрос, удаляющий все элементы, имеющие to_delete=true

Мой вопрос заключается в том, что я могу написать этот запрос:

  • set to_delete: true для удаленных элементов, кроме 5 самых последних (имеющих наибольшее значение deleting_date)

1 Ответ

0 голосов
/ 05 ноября 2019

Я не уверен, что вам нужно поле to_delete.

Я бы сделал сортировку + предел, чтобы найти последнее N удаленное:

const elements = await db.elements.find({ deletion_date: { $exists: true } }, { $sort: { deletion_date: -1 }, $limit: n });

Если вы добавитеиндекс на deletion_date, запрос очень быстрый. См. https://docs.mongodb.com/manual/indexes/#single-field.

А для полного удаления:

db.elements.remove({ 
    deletion_date: { $exists: true },
    _id: { $nin: elements.map(e => e._id) }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...