我有一个名为user的集合,有三个属性
在我的代码中,我执行单一复合查询,如下所示:
db.user.find({'email': <some_email>, 'zipcode': <some_zipcode>})
db.user.find({'email': <some_email>)
我的问题是,如果我在电子邮件和邮政编码上添加复合索引,是否还需要在电子邮件中添加单个索引?我不确定复合指数是否涵盖两种情况。感谢。
答案 0 :(得分:0)
复合指数不涵盖两种情况。如果没有在电子邮件中添加单个索引,那么我有这样的记录,它具有相同的电子邮件:
{'email':'gg@gg.com', 'zipcode':'ABC123'}
{'email':'gg@gg.com', 'zipcode':'ABC124'}
在电子邮件中使用单个索引会阻止集合中的上述记录
答案 1 :(得分:0)
是的,复合索引可用于两个查询。 然而 ,这取决于您如何建立复合索引;意识到索引中的字段顺序很重要。
如果您想要执行这两个查询:
db.user.find({'email': <some_email>, 'zipcode': <some_zipcode>})
db.user.find({'email': <some_email>)
然后,在建立索引时,首先要使用email
字段创建复合索引,这一点非常重要。
例如:
db.users.createIndex({
"email" : 1,
"stock" : 1
})
这将允许db.user.find({'email': <some_email>)
利用复合索引,因为email
字段是索引前缀;换句话说,该字段位于索引字段的开头。
阅读复合指数Prefixes以更好地理解这一概念。
另外,有关复合索引的更多信息,请参阅MongoDB的Compound Indexes。