mongo:“2d”指数和正常指数

location: {lat: Number, lng: Number} 

位置是在我的MongoDB 2d索引,我一直在使用这个地理空间search,这是正常工作。

现在,如果我需要searchdb.find({lat:12.121212,lng:70.707070}),它会使用相同的索引吗? 或者,我是否需要定义一个新的索引? 如果是这样,怎么样?

我在node.js中使用mongoose驱动程序

用于执行地理空间命令的2d索引不会帮助在两个字段上进行等同性匹配。 为此,您需要在两个子文档上定义复合索引,如下所示:

 db.collection.ensureIndex({"location.lat" : 1, "location.lng" : 1}) 

这对我来说最适合用testing数据集 – 你也可以在location字段本身定义一个正常的索引,但效率会比较低。 您可以使用提示testing相关性能,并解释任何索引组合。 例如:

 db.collection.find({"location.lat" : 179.45, "location.lng" : 90.23}).hint("location.lat_1_location.lng_1").explain() 

你可以为你想要的任何索引做到这一点,但是为了检查返回的结果,你需要放弃.explain()

请记住,一个查询一次只能使用一个索引,所以如果你想要结合这两个(等价和一个地理空间search),那么2d索引将是唯一使用的索引。

注意:以上所有示例都来自MongoDB JS shell,而不是node.js