2016-10-14 123 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}' –