【发布时间】:2020-04-09 01:01:34
【问题描述】:
对于今天的任务,我正在尝试在集合中聚合文档(我们称之为 collection1,在管道的一个阶段中,我尝试使用 $lookup 从另一个集合中检索文档(我们称之为 collection2)。
collection1对象模型:
{
"field1": "value1",
"field2": "value2"
"field3": "value3"
}
collection2对象模型:
{
"field1: "value1",
"field2"; "value2",
"field3: {
"field31": "value31",
"field32": "value32"
}
}
我真正想做的是从collection2 检索文档,其中field3.field31 等于collection1s field1 的值。
我的 $lookup 阶段看起来像这样,但目前它似乎不起作用。我没有发现任何线索是否应该有效,但期待您的回复。
{
$lookup: {
from: "collection2",
let: {
"c": "$field1",
"l": "$field2",
"t": "$field3",
},
pipeline: [
{
$match: {
$expr: {
$and: [
{ $eq: ["$field1", "$$c"] },
{ $eq: ["$field2", "$$l"] },
{ $eq: ["$field3.field31", "$$t"] },
]
}
},
},
],
as: "awesomejoin"
}
}
我想避免有一个项目或一个组,然后再次展开和过滤。我的愿望是直接从比赛阶段获得记录,认为这在性能方面更好......
让我知道你对此的看法。
谢谢
【问题讨论】:
-
值不匹配
field3.field31和field3mongoplayground.net/p/eF9Oz30NklL -
感谢您在这里投入的精力和时间。我不能分享实际的对象和完整的管道,但我当然可以提供更好的例子。我的问题是,对于“as”,我似乎使用了 mongo 保留关键字。
scheduled。换了名字,一切都变得生动起来。昨天工作时间过长。 -
抱歉,无法联系到您。请尝试用一些例子和样本集来解释
标签: mongodb aggregation-framework