2016-10-14 124 views
0

设置限制所以,有两个限制我想在盟DB设置:上蒙戈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 }) 

此外,如果你要设置你的收藏从猫鼬架构封顶,你可以使用加盖选项如下:

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

此集合将始终只保存一个可更新的文档。请注意,这些文件一旦插入加盖集合can not be deleted。所以这也解决了你的删除问题。


另外, size选项,需要指定,可以是任意正整数值,这将在内部通过 mongo被转换成的 4096 bytes重要一minumum,或接近的多个256

即使在指定文档的最大编号 时,也始终需要size参数。如果集合 在达到最大文档数 之前达到最大大小限制,MongoDB将删除较早的文档。

来源:MONGODB docs


另外,如果你想最小或最大值设置为秒,你可以随时使用猫鼬 min-max验证。所以下面的模式应该适合你。

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

太棒了。我可以在模式本身添加'capped:true,max:1'吗? – deeveeABC

+0

嗯...我仍然遇到同样的问题 - 即插入多个文档。 (即使当我使用封顶) – deeveeABC

+0

你需要一个封顶的选项,其大小属性和最大属性'{capped:true,size:4000,max:1}' –