【问题标题】:MongoDB ensureIndex across collections?跨集合的MongoDB ensureIndex?
【发布时间】:2011-11-16 14:58:20
【问题描述】:

是否可以跨集合调用 ensureIndex(即使对于尚未创建的集合)?

例如,假设我在同一个数据库中有 3 个集合:“london”、“newyork”和“tokyo”。我有一个名为“employee_username”的字段,它在所有当前和未来的集合中必须是唯一的。也就是说,如果一个叫“susan”的人在“london”中注册为“employee_username”,那么在“newyork”集合中就不能存在同样的情况。此外,如果将来我需要创建一个名为“hongkong”的新集合,则不能在其中的“employee_username”中使用“susan”。

这可能吗?

谢谢!


是的,谢谢您的回复。

但是,MongoDB 说“通常,拥有大量集合不会显着降低性能,并且会产生非常好的性能。”在 [http://www.mongodb.org/display/DOCS/Using+a+Large+Number+of+Collections]。

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

有人有cmet吗? (我的方法认为性能和优化是第一因素。)

谢谢!

【问题讨论】:

    标签: mongodb indexing


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-09
      • 1970-01-01
      • 1970-01-01
      • 2013-08-18
      • 2015-09-06
      • 2011-10-23
      • 2014-04-17
      相关资源
      最近更新 更多