0

因此,我想在 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' 添加到架构中,或者是否已经有 mongo 选项?

任何提示将不胜感激!

4

1 回答 1

2

这可以使用mongodb中的Capped Collections轻松实现。您可以设置文档数量限制,因此在您的情况下,您可以将最大文档数量设置为 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,您需要指定的选项可以是任何正整数值,它将在内部转换为 256mongo的最小值4096 bytes或最接近的倍数。

重要的:

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

来源:MONGODB 文档


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

var numbersSchema = new mongoose.Schema({
  seconds: { type: Number, min: 60 }
},{ capped : true, size:4000,  max : 1 })
于 2016-10-14T09:28:16.880 回答