【问题标题】:Using more than one geospatial index per collection in MongoDB在 MongoDB 中每个集合使用多个地理空间索引
【发布时间】:2012-11-22 17:11:10
【问题描述】:

Current MongoDB 文档声明如下:

目前每个集合可能只有 1 个地理空间索引。 虽然 MongoDB 可能允许创建多个索引,这种行为是 不支持。因为MongoDB只能使用一个索引来支持一个 单个查询,在大多数情况下,具有多个地理索引会产生 不良行为。

但是,当我在一个集合中创建两个地理空间索引(使用 Mongoose)时,它们工作得很好:

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

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

我的问题是:虽然它似乎有效,但 MongoDB 文档说这可能“产生不良行为”。到目前为止,无论是在测试还是使用中,都没有发现任何不良的东西。

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

【问题讨论】:

    标签: node.js mongodb mongoose geospatial


    【解决方案1】:

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

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

    和:

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

    然后比较解释信息给你的内容。您可能会看到只有第一个创建的地理索引用于both 搜索。在 JIRA 中有几张票你可能想投票:

    【讨论】:

    • 很棒的笔记,谢谢!将进一步探索这一点。关于解决方法的任何想法?
    • 您可以使用两个集合,也可以将文档分成两部分 - 其中一个标志确定它是原始的“loc”还是“loc2”字段......不漂亮,但是它可能对你有用。
    • 谢谢!我还有一个想法是使用包含两个位置的附加列表作为地理空间索引的缓存。但我得说,最理想的解决方案是能够使用两个地理空间索引......我想我还没有那么奢侈。
    猜你喜欢
    • 2011-09-29
    • 1970-01-01
    • 2017-02-18
    • 1970-01-01
    • 2011-04-22
    • 2016-02-12
    • 2013-02-04
    • 2011-12-03
    • 1970-01-01
    相关资源
    最近更新 更多