MongoDB:具有稀疏值的唯一和稀疏复合索引

时间:2012-07-08 21:01:22

标签: mongodb

我正在尝试存储以下链接:

URL = {
  hostname: 'i.imgur.com',
  webid: 'qkELz.jpg'
}

我想在这两个字段上使用唯一且稀疏的复合索引,因为:

  1. hostnamewebid的组合应该是唯一的。
  2. 始终会使用webid 查询
  3. hostname
  4. webid无需全局唯一。
  5. URL不需要网络代码。
  6. 然而,当我这样做时,我收到以下错误:

    MongoError: E11000 duplicate key error index: db.urls.$hostname_1_webid_1  dup key: { : "imgur.com", : null }
    

    我想在复合索引的情况下,计算空值,而在常规索引中,它们不计算。

    出于这个问题的任何方法?现在,我只是分别编制hostnamewebid索引。

1 个答案:

答案 0 :(得分:5)

请记住,mongodb每个查询只能使用一个索引(它不会将索引连接在一起,以便对两个具有更快单独索引的字段进行查询。)

也就是说,如果您想尝试检查唯一性,可以在插入之前从应用程序执行查询(这只能部分解决问题,因为查询和插入时之间存在差距)。

您可能想对此筛选索引的JIRA问题进行投票,这可能会对您的用例有所帮助: https://jira.mongodb.org/browse/SERVER-785