2015-02-03 3 views
2

Я ищу, чтобы динамически ограничивать количество документов в коллекции. Например, я буду хранить до 1000 документов для членов GOLD и 500 для членов SILVER. Когда максимум достигнут для конкретного пользователя и создается новый документ, самый старый документ, принадлежащий этому пользователю, должен быть удален.Динамические изменения в MongoDB

Обнаженные коллекции не подходят для чего-то подобного, поэтому мне было интересно, может ли я добавить свою собственную логику для реализации этой функции типа «очередь» или есть какой-то проверенный и проверенный подход там где-то?

+0

Надеюсь, что это дает вам представление - http://stackoverflow.com/questions/26220879/how-to-store-an-ordered-set-of-documents-in-mongodb-without-using-a -capped-colle/26230177 # 26230177 – BatScream

ответ

1

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

schema.pre('save', function(next) { 
    model.find({}, { 
     sort: { $natural: -1 }, // sort in reverse 
     limit: 50,    // to get last 50 docs 
    }).remove(); 
    next(); 
}); 
+0

Это выглядит интересно. Как я могу использовать это для каждого пользователя? – tommyd456

+0

Как коллекция связана с пользователем? Сделайте это в этой коллекции. – laggingreflex

+0

Я пытаюсь понять этот @laggingreflex, так что это должно найти последние 50 документов, или это говорит - проверьте 50 документов, а если есть 50, удалите последний? потому что это похоже на то, что он просто удаляет последний без проверки, или он делает оба? – Lion789

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