
[英]how to check if a field exists in a specific document Mongodb using C#?
[英]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.