MongoDB - 指定该集合可能只包含一个文档

时间:2014-12-02 19:11:19

标签: mongodb

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

2 个答案:

答案 0 :(得分: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,从而阻止插入任何其他空项。当它尝试插入时,它会在您的应用代码中抛出异常。

答案 1 :(得分:1)

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

这是您创建上限集合的方法:

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

此集合的大小始终小于5000,并且只能包含1个文档。

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