繁体   English   中英

使用GeoNear返回MongoDB中按字段分组的最近文档

[英]Returning nearest document grouped by field in MongoDB using GeoNear

我正在使用官方的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命令来实现这一点,所以我宁愿避免使用中间集合的两步过程(将这些结果缓存为在这种情况下无关紧要,因为总是从不同的源位置调用查询)

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM