2013-07-10 5 views
3

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

Например, у меня есть список комментариев, ограниченный 10 элементами, 11-й предмет входит, а самый старый - сбрасывается обратно.

Если не поддерживается в Mongoose, может кто-то сказать мне некоторые обманки, которые я могу использовать? (До/и т.д.)

Большое спасибо

ответ

3

MongoDB ввела capped arrays (из версии 2.4), которая может использоваться для ограничения количества элементов в массиве.

Вы можете увидеть некоторые примеры в limit number of elements

+0

Любые конкретные примеры вокруг мангуста? – Slappy

+0

У меня нет большого опыта в мангусте, извините. –

+0

+1 В Мангусте это ничем не отличается. – JohnnyHK

0
db.myCollection.update({"arrayField.10": {$exists: true}}, {$pop: {"arrayField": 1}}) 

The «П.10» ключ проверяет, является ли элемент 10 существует в «arrayField», что будет означать, что размер массива равен или больше 10. Если он делает, удаляет 1 элемент с задней части массива атомарно.

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

+0

Это используется родной монго правильно? – Slappy

+0

Правильно, этот запрос является родным монго. –

1

По Mongoose Wiki - теперь он поддерживает блокированы массивы MongoDB в:

Mongoose 3.6 поддерживает эти новые MongoDB 2.4 операторы массива.

Model.update (matcher, {$ push: {docs: {$ each: [{x: 1}, {x: 23}, {x: 5}], $ slice: -2, $ sort : {x: 1}}}})

Смежные вопросы