Есть ли способ ограничить количество записей в определенной коллекции - PullRequest
2 голосов
/ 25 июня 2011

При условии, что я вставляю следующие записи (например, foo1, foo2, foo3, foo4, .... foo10) Я хотел бы, чтобы коллекция сохраняла только 5 записей в любой момент времени (например, это может быть foo1, ... foo5 ИЛИ foo2, ... foo6 или foo6, ... foo10)

Как мне этого добиться?

Ответы [ 3 ]

5 голосов
/ 25 июня 2011

Звучит так, будто вы ищете ограниченную коллекцию :

Закрытые коллекции - это коллекции фиксированного размера ...
[...]
Один разпространство полностью используется, вновь добавленные объекты заменят самые старые объекты в коллекции.


Это можно сделать с помощью команды, аналогичной

db.createCollection("collectionName",{capped:true,size:10000,max:5})

, где 10000это размер в байтах, а 5 - максимальное количество документов, которое вы бы ограничили в коллекции.

1 голос
/ 28 октября 2014

Используя
db.createCollection ( "CollectionName", {ограничен: правда, размер: 10000, макс: 1000})

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

0 голосов
/ 04 октября 2018

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

Однако, если вы хотите вставить и удалить любой документ в любом порядке и ограничить максимальное количество документов вколлекция mongoDB не предлагает прямого решения.

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

"count": {"$ gte": 0}

Алгоритм был прост.Уменьшить счет на единицу.Если это удалось, вставьте документ.Если произойдет сбой, это означает, что свободного места не осталось.

И наоборот для удаления.

Также вы можете использовать транзакции для предотвращения сбоев (счет уменьшается, но сервис сбой перед операцией вставки).

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