2012-07-22 77 views
1
location: {lat: Number, 
      lng: Number} 

位置是我mongodb中的2d索引,我一直在使用它进行地理空间搜索,工作正常。mongo:“2d”索引和正常索引

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

我正在使用Node.js的

回答

1

用来做地理空间命令二维指数猫鼬司机是不会帮助在这两个领域的等价比赛。对于您需要定义在两个子文档的复合索引,这样的事情:

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

+0

Adam,谢谢。这有助于。 – user644745 2012-07-22 17:07:25