我正在使用官方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命令中实现这一点,而我宁愿避免使用中间集合的两步过程(缓存这些结果与此实例无关,因为始终从不同的源位置调用查询)
答案 0 :(得分:0)
使用地理查询时,您可以告诉MongoDB返回最近的n个结果,并且您可以告诉MongoDB也检查一些其他字段(如“类型”字段)。
但据我所知,你无法告诉它为该附加字段的每个不同值返回最接近的匹配。如果您确实找到了使用MongoDB shell发出此类查询的方法,我可以帮助您将其转换为C#。
我认为您只需要为每个“类型”重复一次查询,如果您只对最接近的匹配感兴趣,请将文档限制设置为1。