Установить ограничения на сбор монго
Итак, в mondo db я хочу установить два ограничения:
1. Разрешить вставку в базу данных только одного документа и не более. Этот документ нельзя удалить после добавления, НО его можно изменить. Кроме того, никакие другие документы не могут быть добавлены к этой коллекции.
В этой схеме будет разрешено только одно значение.
{ "_id" : ObjectId("5800"), "seconds" : "120", "__v" : 0 }
Больше не будет разрешено добавлять новые секунды, и только вышеуказанный документ может быть изменен.
Я пытался:
var numbersSchema = new mongoose.Schema({
seconds: { type: Number, min: 60 }
},{ capped : true, size:4000, max : 1 })
Однако я все еще могу добавить несколько документов:
{ "_id" : ObjectId("5800c7f53c609009dc5800f4"), "seconds" : 390, "__v" : 0 }
{ "_id" : ObjectId("5800c81b3c609009dc5800f5"), "seconds" : 590, "__v" : 0 }
2. Установите минимальное значение в поле ввода схемы.
var numbersSchema = new mongoose.Schema({
seconds: Number
})
Таким образом, в этом случае "секунд" должно быть не менее 60 секунд в качестве минимального значения. Я предполагаю, что это должно быть изменено в схеме, но я не знаю как. Можно ли добавить '>59' в схему, или уже есть опция с Монго?
Любые советы будут оценены!
1 ответ
Это может быть легко достигнуто с помощью Capped Collections в mongodb. Вы можете установить ограничение на количество документов, поэтому в вашем случае вы можете установить максимальное количество документов равным 1, как показано ниже:
db.createCollection("numbers", { capped : true, size:4000, max : 1 } )
Также, если вы хотите установить свою коллекцию как ограниченную из схемы mongoose, вы можете сделать это, используя опцию capped следующим образом:
var numbersSchema = new mongoose.Schema({
seconds: Number
},{ capped : true, size:4000, max : 1 })
Эта коллекция всегда будет содержать только один документ, который можно обновить. Обратите внимание, что документы, вставленные в закрытые коллекции , удалить нельзя. Так что это решает и вашу проблему удаления.
Так же
size
параметр, который вам нужно указать, может быть любым положительным целочисленным значением, которое будет преобразовано внутри mongo
до минимума 4096 bytes
или ближайший кратный 256.ВАЖНЫЙ:
Аргумент размера требуется всегда, даже если вы указываете максимальное количество документов. MongoDB удалит более старые документы, если собрание достигает предела максимального размера, прежде чем достигнет максимального количества документов.
Источник: MONGODB документы
Кроме того, если вы хотите установить минимальное или максимальное значение в секундах, вы всегда можете использовать mongoose min-max проверки. Поэтому следующая схема должна работать для вас.
var numbersSchema = new mongoose.Schema({
seconds: { type: Number, min: 60 }
},{ capped : true, size:4000, max : 1 })