对于今天的任务,我正在尝试汇总集合中的文档(我们将其称为collection1
,在管道的其中一个阶段中,我尝试使用$ lookup从另一个集合中检索文档(我们将其称为{{1 }})。
collection2
对象模型:
collection1
{
"field1": "value1",
"field2": "value2"
"field3": "value3"
}
对象模型:
collection2
我要尝试做的是从{
"field1: "value1",
"field2"; "value2",
"field3: {
"field31": "value31",
"field32": "value32"
}
}
检索文档,其中collection2
等于field3.field31
s collection1
的值。
我的$ lookup阶段看起来像这样,但是目前似乎不起作用。我没有发现任何线索是否可以奏效,但期待您的答复。
field1
我想避免拥有一个项目或一个小组,然后再次展开和过滤。我的愿望是直接从比赛阶段获得记录,认为这在表现上会更好...
让我知道您对此的想法。
谢谢
答案 0 :(得分:0)
请尝试:
db.Collection1.aggregate([
{
$lookup:
{
from: "Collection2",
localField: "field1",
foreignField: "field3.field31",
as: "docs"
}
}
])
使用普通的$lookup
应该很简单,不能完全确定为什么要创建局部变量并在相同的变量上寻找相等,而且$unwind
还将用于数组中可以访问的对象内部元素使用.
表示法,就像在编程语言中一样。
参考: $lookup