gpt4 book ai didi

MongoDB:使用与输入文档变量的匹配

转载 作者:行者123 更新时间:2023-12-02 02:51:13 24 4
gpt4 key购买 nike

为什么我必须使用此代码:{ $match: { $expr: { <aggregation expression> } } }使用文档输入变量来匹配文档而不是执行:{ $match: { <query> } }

例如:

    $lookup: {
from: "comments",
let: { myvar: '$myInputDocVariable'},
pipeline: [
{ $match:
{ $expr:
{ $and:
[
{ $eq: [ "$varFromCommentDocument", "$$myvar" ] },
]
}
}
},
],
as: "returnedValue"
}

上面的查询工作正常,但下面的查询无法按预期工作。为什么是这样?这是否意味着如果您在 $lookup 中使用输入变量您必须使用管道 $expr ?这是为什么?

    $lookup: {
from: "comments",
let: { myvar: '$myInputDocVariable'},
pipeline: [
{ $match: { "$varFromCommentDocument", "$$myvar" } }
],
as: "returnedValue"
}

最佳答案

当您执行uncorrelated sub-queries时对于 $lookup 运算符:

  • 如果您需要在pipeline内比较父集合的field,MongoDB无法为应用标准查询语法(field:value) >变量/Aggregation expressions 。在这种情况下,您需要使用 $expr 运算符。

示例:

{ $match:
{ $expr:
{ $and:[
{ $eq: [ "$varFromCommentDocument", "$$myvar" ] },
]}
}
}
  • 如果它与“硬编码”值匹配,则无需使用 $expr 运算符。

示例:

$lookup: {
from: "comments",
pipeline: [
{ $match:{
"key": "value",
"key2": "value2"
}}
],
as: "returnedValue"
}

关于MongoDB:使用与输入文档变量的匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61948477/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com