我正在使用官方 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 命令执行此操作,我宁愿避免使用中间集合的两步过程(缓存这些结果是在这种情况下不相关,因为查询总是从不同的源位置调用)