Установить ограничения на сбор монго

Итак, в 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 })
Другие вопросы по тегам