使用涵盖查询
要测试涵盖的查询,请考虑用户集合中的以下文档:
{
"_id": ObjectId("53402597d852426020000003"),
"contact": "987654321",
"dob": "01-01-1991",
"gender": "M",
"name": "Tom Benzamin",
"user_name": "tombenzamin"
}
我们将首先在users集合字段gender和user_name创建一个复合索引-
>db.users.createIndex({gender:1,user_name:1})
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
现在,该索引将涵盖以下查询-
>db.users.find({gender:"M"},{user_name:1,_id:0})
{ "user_name" : "tombenzamin" }
也就是说,对于上面的查询,MongoDB不会去研究数据库文档。相反,它将从索引数据中获取所需数据,速度非常快。由于索引不包含_id字段,因此我们已将其从查询结果集中明确排除,因为默认情况下,MongoDB在每个查询中都会返回_id字段。所以下面的查询不会在上面创建的索引中涉及(没有在这两个字段上创建了复合索引)-
>db.users.find({gender:"M"},{user_name:1})
{ "_id" : ObjectId("53402597d852426020000003"), "user_name" : "tombenzamin" }
最后,请记住,如果-