1
location: {lat: Number,
           lng: Number}

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

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

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

4

1 回答 1

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

于 2012-07-22T11:57:33.697 回答