我想创建一个名为“status”的特殊MongoDB集合,我想指定它只能包含一个文档。在任何情况下,我都不希望此集合包含多个文档。这可能吗?
答案 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个文档。
请注意,上限集合的工作方式与循环缓冲区类似:一旦集合填充其分配的空间,它将通过覆盖集合中最旧的文档为新文档腾出空间。