我正在尝试存储以下链接:
URL = {
hostname: 'i.imgur.com',
webid: 'qkELz.jpg'
}
我想在这两个字段上使用唯一且稀疏的复合索引,因为:
hostname
和webid
的组合应该是唯一的。webid
查询hostname
webid
无需全局唯一。URL
不需要网络代码。然而,当我这样做时,我收到以下错误:
MongoError: E11000 duplicate key error index: db.urls.$hostname_1_webid_1 dup key: { : "imgur.com", : null }
我想在复合索引的情况下,计算空值,而在常规索引中,它们不计算。
出于这个问题的任何方法?现在,我只是分别编制hostname
和webid
索引。
答案 0 :(得分:5)
请记住,mongodb每个查询只能使用一个索引(它不会将索引连接在一起,以便对两个具有更快单独索引的字段进行查询。)
也就是说,如果您想尝试检查唯一性,可以在插入之前从应用程序执行查询(这只能部分解决问题,因为查询和插入时之间存在差距)。
您可能想对此筛选索引的JIRA问题进行投票,这可能会对您的用例有所帮助: https://jira.mongodb.org/browse/SERVER-785