2012-11-22 23 views
1

Current MongoDB文档状态:MongoDB中使用每收集一个以上地理空间索引以下

您可能只有每收集1个地理空间索引,现在。虽然 MongoDB可能允许创建多个索引,但此行为不支持 。因为MongoDB只能使用一个索引来支持单个查询,所以在大多数情况下,具有多个地理索引会产生不合需要的行为 。

然而,当我在集合中创建两个地理空间指数(用猫鼬),他们工作得很好:

MySchema.index({ 
    'loc1': '2d', 
    extraField1: 1, 
    extraField2: 1 
}); 

MySchema.index({ 
    'loc2': '2d', 
    extraField1: 1, 
    extraField2: 1 
}); 

我的问题是这样的:虽然它似乎工作,MongoDB的文件说,这可能“产生不良行为”。到目前为止,在测试或使用中都没有发现任何不受欢迎的东西。

我应该关心这个吗?如果答案是肯定的,那么你会推荐什么作为解决方法?

回答

4

它仍然不被支持,所以尽管你可以创建其中两个,但这并不意味着它们实际上被正确使用。我将在mongo shell上调查解释输出,并以地理空间方式发出一些使用loc和loc2字段的查询。例如有:

use yourDbName 
db.yourCollection.find({ loc: { $nearSphere: [ 0, 0 ] } }).explain(); 

和:

db.yourCollection.find({ loc2: { $nearSphere: [ 0, 0 ] } }).explain(); 

,然后比较一下解释信息给你。您可能会看到只有第一个创建的地理索引用于这两个搜索。有在JIRA几个门票这一点,你可能要进行投票:

+0

真棒笔记,谢谢!进一步探索这一点。有关解决方法的任何想法? – jsalonen

+0

要么你可以使用两个集合,要么你可以将文档分成两部分 - 一个标志确定它是原始的“loc”还是“loc2”字段......不是很漂亮,但它可能适用于你。 – Derick

+0

谢谢!我还有一个想法是使用包含两个位置的附加列表作为地理空间索引的缓存。但我得说话,最优化的解决方案将是能够使用两个地理空间索引...猜猜我没有奢侈品去做(尚)。 – jsalonen

相关问题