我正在尝试使用坐标作为联接匹配项在两个集合之间执行复杂的联接,并且收到以下错误消息:
错误:命令失败:{ “ ok”:0, “ errmsg”:“无法识别的表达式'$ geoWithin'”, “代码”:168, “ codeName”:“ InvalidPipelineOperator” }
这是我的查询内容:
db.getCollection('grdFile').aggregate([
{"$match": {"stack_id":"TSX010_A"}},
{"$lookup":
{
"from": "stand",
"let": {"image_geometry": "$geometry",
"acquisition_date": "$acquisition_date"},
"pipeline": [
{"$match":
{"$expr":
{"$and":
[
{"bounding_box": {
"$geoWithin": {
"$geometry": {
"type": "Polygon",
"coordinates": "$$image_geometry"
}
}
}
}
]
}
}
}
],
"as": "stands"
}
}
]
)
如果我将"bounding_box"
替换为"$bounding_box"
,则会抱怨它无法识别表达式"$bounding_box"
。
修改:
我使用$expr
来访问let
子句中的变量。没有$expr
,我可以使用$geoWithin
,但不能访问变量。
我的问题是:我可以使用其他运算符来完成这项工作吗,还是Mongo中有一个限制,根本不允许在$expr
子句中使用地理运算符? >
问题如下:我有一个代表geoTIFF文件的集合(具有脚印边界的坐标),以及一个具有与之关联的元数据的多边形的集合。我想查询图像集合(使用或不使用过滤器),并加入每个记录,使其落入图像边界内(在多边形的元数据上使用或不使用其他过滤器)的多边形。我以为我可以使用$lookup
聚合来实现这一点,但是遇到的局限性(请参见上文)使我寻找其他可能性。我想到的一个想法是自己创建一个查询表,即一个我称为imagePolygonLookup
的集合,其中包含两个字段-polygon_id
和image_id
。这是一个经典的多对多查询表。然后,我将能够将该集合用作其他集合中任何一个(或两个)的$lookup
查询的基础。
这是实现这一目标的另一种第三种方法吗?