MongoDb ограниченная под-коллекция - PullRequest
2 голосов
/ 01 июля 2011

Можно ли создать ограниченную вложенную коллекцию.Я пытаюсь сделать что-то вроде:

user = {
  name: String,
  latest_messages: [String]
}

Где latest_messages ограничен до 10.

Если нет, что вы предлагаете в качестве альтернативы?

Обновление 1:

Кажется, что единственное решение - сохранить ограниченный массив вручную.Вот способ сделать это:

joe = {name: 'Joe', latest_messages: ['', '', '', '', '', '', '', '', '', '']}
db.users.save(joe)

db.users.update({name: 'Joe'}, {$push: {'latest_messages': 'hello'}})
db.users.update({name: 'Joe'}, {$pop: {'latest_messages': -1}})

db.users.update({name: 'Joe'}, {$push: {'latest_messages': 'world'}})
db.users.update({name: 'Joe'}, {$pop: {'latest_messages': -1}})

Есть предложения по повышению эффективности?

Обновление 2:

Есть откройте билет Jira, «SERVER-1050» , который запрашивает добавление возможности выполнять два (push & pop) как одну атомарную операцию.

Ответы [ 4 ]

2 голосов
/ 01 сентября 2013

Начиная с версии 2.4 существует функция, позволяющая делать это, называемая «ограниченные массивы». Это позволяет $push документам в массиве в сочетании с операторами $each, $slice и $sort добавлять один или несколько документов в массив при сохранении заданного размера, сортируя по указанному полю вложенных документов.

См. Точный синтаксис и примеры здесь .

0 голосов
/ 01 июля 2011

Может быть, вы можете создать отдельную ограниченную коллекцию для каждого пользователя?Таким образом, имя коллекции - это имя каждого пользователя.Я не знаю, станет ли MongoDB медленным, если у вас много коллекций?Сколько у вас разных пользователей?Что-то вроде 100, 1000, 10000 ...?

0 голосов
/ 10 сентября 2012

На их доске JIRA, которой почти 2 года, есть просьба сделать именно это. Его планируется добавить в следующую версию mongodb начиная с версии 1.6, поэтому я не буду задерживать дыхание.

https://jira.mongodb.org/browse/SERVER-991

0 голосов
/ 01 июля 2011

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

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