【问题标题】:Set limits on mongo db collection设置 mongodb 集合的限制
【发布时间】:2016-10-14 09:17:27
【问题描述】:

所以,我想在 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 的选项?

任何提示将不胜感激!

【问题讨论】:

  • 为什么要在数据库级别添加限制?不要在应用程序级别插入新记录,仅在应用程序中使用更新查询。

标签: mongodb mongoose schema capped-collections


【解决方案1】:

这可以在 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 })

此集合将始终只包含一个可以更新的文档。请注意,文档一旦插入上限集合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 })

【讨论】:

  • 太棒了。我可以将 'capped : true, max : 1' 添加到架构本身吗?
  • hmm... 我仍然遇到同样的问题 - 即插入多个文档。 (即使我使用上限)
  • 你需要一个具有 size 属性和 max 属性的封顶选项{ capped : true, size:4000, max : 1 }
  • 正确。我试图实现这一点,但仍然遇到同样的问题
  • 啊,我明白了。 Capped 每次都会覆盖文档,但是我必须在 mongo cli 中写这个 - 'db.createCollection("log", { capped : true, size : 5242880, max : 5000 } )' 这不是我想要做的.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 2014-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多