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

时间:2012-07-22 07:54:21

标签: node.js mongodb mongoose

location: {lat: Number,
           lng: Number}

位置是我的mongodb中的2d索引,我一直在使用它进行地理空间搜索,这很好。

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

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

1 个答案:

答案 0 :(得分:1)

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

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

这对我来说最适合使用一组测试数据 - 您还可以在位置字段本身上定义一个普通索引,但效率会降低。您可以使用提示测试相对性能,并解释任何索引组合。例如:

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

你可以为你想要的任何索引执行此操作,但是为了检查返回的结果,你需要删除.explain()

还请记住,查询一次只能使用一个索引,因此如果您要将两者(等效和地理空间搜索)结合起来,那么2d索引将是唯一使用的索引。

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