5

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

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

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

  1. hostname和的组合webid应该是唯一的。
  2. webid将始终使用 进行查询hostname
  3. webid不必是全局唯一的。
  4. AURL不需要有 webid。

但是,当我这样做时,我收到以下错误:

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

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

有什么办法可以解决这个问题?现在我只是要单独索引hostname和索引webid

4

1 回答 1

5

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

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

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

于 2012-07-08T21:21:15.827 回答