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

Jon*_*Ong 5 mongodb

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

URL = {
  hostname: 'i.imgur.com',
  webid: 'qkELz.jpg'
}
Run Code Online (Sandbox Code Playgroud)

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

  1. 结合hostname而且webid应该是独一无二的.
  2. webid永远都会被查询hostname.
  3. webid 不必是全球唯一的.
  4. 一个URL不需要有webid.

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

MongoError: E11000 duplicate key error index: db.urls.$hostname_1_webid_1  dup key: { : "imgur.com", : null }
Run Code Online (Sandbox Code Playgroud)

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

有什么办法摆脱这个问题?现在我只是要索引hostnamewebid独立.

Eve*_*man 5

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

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

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