Я хочу удалить старые журналы чата, т. Е. Любые записи, кроме самых последних 10.
Вот как я получаю последние:
collection.find({"chatroom" : chatroom}).limit(10).sort({ time: -1 })
Как мне удалить все остальное?
Спасибо.
Вы можете сделать запрос, чтобы получить 10-й самый старый, а затем удалить те, которые старше этого.
var oldest = find({"chatroom" : chatroom}).limit(1).skip(10).sort({ time: -1 }).next(); remove({"chatroom" : chatroom, time : {$lt : oldest.time }})
Как часто вам нужно это делать?О скольких документах мы говорим?
Один из вариантов: переместить последние 10 в некоторую временную коллекцию, очистить коллекцию журналов, повторно вставить из временной коллекции
Это может быть не оптимальным решением.
Как насчет использования закрытой коллекции ?
Зарезервируйте достаточно места в аргументе size и установите max в 10.
size
max
Возможно, вы захотите swtich sort({ time: -1 }) с sort({ $natural: -1 }) для лучшей производительности, если вы переключитесь на ограниченный набор (где оба порядка будут одинаковыми, я думаю).
sort({ time: -1 })
sort({ $natural: -1 })
Вам нужно перебирать каждый элемент результирующего набора и удалять его по отдельности, если вы связались с соответствующими документами через надлежащий фильтр.