使用 GeoNear 返回 MongoDB 中按字段分组的最近文档
本文关键字:最近 文档 字段 GeoNear 返回 MongoDB 使用 | 更新日期: 2023-09-27 18:37:02
我正在使用官方的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 命令执行此操作,我宁愿避免使用中间集合的两步过程(缓存这些结果在这种情况下无关紧要,因为查询总是从不同的源位置调用)
使用geo查询时,你可以告诉MongoDB返回n个最接近的结果,你也可以告诉MongoDB检查一些额外的字段(比如你的"Type"字段)。
但据我所知,您无法告诉它为该附加字段的每个不同值返回最接近的匹配项。如果您确实找到了使用 MongoDB shell 发出此类查询的方法,我可以帮助您将其转换为 C#。
我认为您只需要为每个"类型"重复查询一次,如果您只对最接近的匹配感兴趣,请将文档限制设置为返回 1。