2014-12-02 79 views
0

我想创建一个名为“status”的特殊MongoDB集合,我想指定它可能只包含一个文档。在任何情况下,我都不希望这个集合包含多个文档。这可能吗?MongoDB - 指定集合可能只包含一个文档

+3

您可以使用限制为1的加盖集合。从未尝试过。问题在于它一次只能包含1个,但并不总是相同的文档。 http://docs.mongodb.org/manual/core/capped-collections/ – Matt 2014-12-02 19:14:59

+0

谢谢 - 现在正在研究这种方法。 – jononomo 2014-12-02 19:25:54

回答

2

您可以通过唯一索引来完成此操作。例如:

rs0:PRIMARY> db.unique.insert({a:1}) 
rs0:PRIMARY> db.unique.find() 
{ "_id" : ObjectId("547e2c8c9678b5b7ab75a014"), "a" : 1 } 
rs0:PRIMARY> db.unique.ensureIndex({b:1}, {unique:true}) 
rs0:PRIMARY> db.unique.insert({a:2}) 
E11000 duplicate key error index: test.unique.$b_1 dup key: { : null } 

添加上,你知道永远不会是你的方案的一部分,任何领域的唯一索引。 (在这个例子中'b')然后它将被索引为null,防止插入任何其他空项目。它会在尝试插入时在您的应用代码中引发异常。

+0

这样做的好方法! – 2014-12-02 21:28:24

1

是的,可以通过使用Capped Collection来为集合大小和文档数量设置集合上限。

这是如何创建一个封顶集合:

db.createCollection("log", { capped : true, size : 5000, max : 1 }) 

这个系列将始终具有尺寸小于5000,且只能包含1号文件。

请注意,加盖集合的工作方式与循环缓冲区类似:一旦集合填满其分配的空间,它就会通过覆盖集合中最早的文档为新文档腾出空间。

相关问题