设置mongo db集合的限制

时间:2016-10-14 09:17:28

标签: mongodb mongoose schema capped-collections

因此,我想在mondo db中设置两个限制:

1。只允许将一个文档插入到dbs中,而不再允许。添加后无法删除此文档,但可以修改。此外,该集合中不能添加其他文档。

此架构下只允许一个值。

{ "_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”,或者是否已经有mongo选项?

任何提示将不胜感激!

1 个答案:

答案 0 :(得分:0)

使用mongodb中的Capped Collections可以轻松实现这一点。 您可以设置文档数量限制,因此在您的情况下,您可以将最大文档数设置为1,如下所示:

db.createCollection("numbers", { capped : true, size:4000,  max : 1 } )

此外,如果您想将集合设置为mongoose模式的上限,您可以使用上限选项执行此操作,如下所示:

var numbersSchema = new mongoose.Schema({
  seconds: Number
},{ capped : true, size:4000,  max : 1 })

此集合将始终只包含一个可以更新的文档。请注意,文档一旦插入到上限集合can not be deleted中。所以这也解决了你的删除问题。

<小时/> 此外,您需要指定的size选项可以是任何正整数值,它将在mongo内部转换为最小值4096 bytes,或最接近256的倍数。

重要提示:

  

即使指定了最大数量,也始终需要size参数   的文件。如果是集合,MongoDB将删除旧文档   在达到最大文档之前达到最大大小限制   计数。

来源:MONGODB docs

<小时/> 此外,如果要将最小值或最大值设置为秒,则始终可以使用mongoose min-max验证。因此,以下架构应该适合您。

var numbersSchema = new mongoose.Schema({
  seconds: { type: Number, min: 60 }
},{ capped : true, size:4000,  max : 1 })