MongoDB确保跨集合的索引?

时间:2011-09-14 00:28:23

标签: mongodb indexing

是否可以跨集合调用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]中。

以上给出的例子就是例子。我打算建立一个拥有数百万条记录的社交数据库。所以 - 根据文档 - 出于性能原因,我应该尽可能地分成许多集合。因此,如果我无法创建跨越集合的唯一索引,那么我想我将创建一个“电子邮件地址”集合,其中仅包含电子邮件地址,并且只包含唯一索引。

有没有人有任何意见? (我的方法认为性能和优化是第一因素。)

谢谢!

1 个答案:

答案 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});