因此,我想在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选项?
任何提示将不胜感激!
答案 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 })