Mongodb удалить старый чат - PullRequest
0 голосов
/ 17 июня 2011

Я хочу удалить старые журналы чата, т. Е. Любые записи, кроме самых последних 10.

Вот как я получаю последние:

collection.find({"chatroom" : chatroom}).limit(10).sort({ time: -1 })

Как мне удалить все остальное?

Спасибо.

Ответы [ 4 ]

3 голосов
/ 19 июня 2011

Вы можете сделать запрос, чтобы получить 10-й самый старый, а затем удалить те, которые старше этого.

var oldest = find({"chatroom" : chatroom}).limit(1).skip(10).sort({ time: -1 }).next();
remove({"chatroom" : chatroom, time : {$lt : oldest.time }})
0 голосов
/ 17 июня 2011

Как часто вам нужно это делать?О скольких документах мы говорим?

Один из вариантов: переместить последние 10 в некоторую временную коллекцию, очистить коллекцию журналов, повторно вставить из временной коллекции

Это может быть не оптимальным решением.

0 голосов
/ 18 июня 2011

Как насчет использования закрытой коллекции ?

Зарезервируйте достаточно места в аргументе size и установите max в 10.

Возможно, вы захотите swtich sort({ time: -1 }) с sort({ $natural: -1 }) для лучшей производительности, если вы переключитесь на ограниченный набор (где оба порядка будут одинаковыми, я думаю).

0 голосов
/ 17 июня 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...