是否可以跨集合调用ensureIndex(即使对于尚未创建的集合)?
例如,假设我在同一个数据库中有3个集合:“london”,“newyork”和“tokyo”。我有一个名为“employee_username”的字段,它必须在所有当前和未来的集合中都是唯一的。也就是说,如果某个名为“susan”的人在“london”中注册为“employee_username”,则“newyork”集合中不会存在相同的内容。此外,如果将来我需要创建一个名为“hongkong”的新集合,“susan”不能在其中的“employee_username”中使用。
这可能吗?
谢谢!
是的,谢谢你的回复。
然而,MongoDB表示“通常,拥有大量集合并没有显着的性能损失,并且会带来非常好的性能。”在[http://www.mongodb.org/display/DOCS/Using+a+Large+Number+of+Collections]中。
以上给出的例子就是例子。我打算建立一个拥有数百万条记录的社交数据库。所以 - 根据文档 - 出于性能原因,我应该尽可能地分成许多集合。因此,如果我无法创建跨越集合的唯一索引,那么我想我将创建一个“电子邮件地址”集合,其中仅包含电子邮件地址,并且只包含唯一索引。
有没有人有任何意见? (我的方法认为性能和优化是第一因素。)
谢谢!
答案 0 :(得分:3)
MongoDB不支持跨多个集合的唯一索引,因此这里的一个好方法是使用employee_username
上具有唯一索引的单个集合,文档具有这种结构:
用户强>
{
_id: ObjectId("47cc67093475061e3d95369d"),
location: "newyork",
employee_username: "susan"
},
{
_id: ObjectId("4dc9acea045bbf04348f9691"),
location: "london",
employee_username: "john"
}
创建索引:
db.users.ensureIndex({employee_username:1},{unique:true});