【问题标题】:Returning nearest document grouped by field in MongoDB using GeoNear使用 GeoNear 在 MongoDB 中返回按字段分组的最近文档
【发布时间】:2012-06-14 02:40:06
【问题描述】:

我正在使用官方 C# 驱动程序使用 GeoNear 查询 MongoDB 中的集合。

文件看起来像这样:-

{
    "_id" : "1" ,
    "Resource" : {
        "_id" : "9",
        "Type" : "AAA"
    },
    "Site" : {
        "_id" : "4123" ,
        "Location" : {
            "Longitude" : 145.012345,
            "Latitude" : -30.012345
        }
    }
}

在多对多场景中有多种资源和站点组合。

我的 geoNear 工作正常,但现在需要根据其他条件过滤结果。

我已经具备了基础知识,因此例如可以返回所有特定资源类型,但是我现在需要让查询只返回每种资源类型的最接近的文档。例如,如果我有 10 种资源类型和数百个站点(可能有数千个组合/文档),则查询将返回最多 10 个文档……每个资源类型一个,显示每个资源类型最近的站点(查询可能事实上,如果在我为查询指定的 MaxDistance 中没有该资源类型的站点,则返回小于该值)

编辑

当我使用 C# 库时,我可以使用 LINQ 过滤结果来解决这个问题,但是我仍然有兴趣看看是否有一种方法可以在 MongoDB 中本地执行此操作而不依赖于实现。

我怀疑我可以 MapReduce 的结果来实现我想要的,但是我看不到如何使用 GeoNear 命令执行此操作,我宁愿避免使用中间集合(缓存这些结果在这种情况下是无关紧要的,因为查询总是从不同的源位置调用)

【问题讨论】:

    标签: c# mongodb geospatial


    【解决方案1】:

    使用地理查询时,您可以告诉 MongoDB 返回 n 个最接近的结果,并且您可以告诉 MongoDB 也检查一些附加字段(例如“类型”字段)。

    但据我所知,您不能告诉它为该附加字段的每个不同值返回最接近的匹配项。如果您确实找到了使用 MongoDB shell 发出此类查询的方法,我可以帮助您将其转换为 C#。

    我认为您只需要为每个“类型”重复查询一次,如果您只对最接近的匹配感兴趣,请将文档的限制设置为返回 1。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-12
      • 2015-01-04
      • 1970-01-01
      • 2011-07-06
      • 2020-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多