【发布时间】:2020-06-08 01:56:21
【问题描述】:
您好,我正在尝试使用我在 let 中定义的变量用于匹配查找,但在使用正则表达式时它不返回任何结果:
它是这样工作的:
db.MSP_Prosper.aggregate([
{ $match: {Cleavage_score: {$gte:0.7}}},
{ $lookup: {
from:"Uniprot_New_Entries",
let: { order_item: new RegExp('.*' + "P62258" + '.*')},
pipeline: [{
$match: { Uniprot_AC : new RegExp('.*' + "P62258" + '.*')
}},
{ $project: { _id: 0,
test: "$$order_item",
date: { name: "$Uniprot_ID",
date: "$Min_Max_Of_the_Ft_chain"}
}
}],
as:"cleavage_sites"
}
}
])
但当我尝试使用 let 函数中定义的相同变量时:
db.MSP_Prosper.aggregate([
{$match: {Cleavage_score: {$gte:0.7}}},
{
$lookup: { from:"Uniprot_New_Entries",
let: { order_item: new RegExp('.*' + "P62258" + '.*')},
pipeline: [
{ $match:
{ Uniprot_AC : "$$order_item" }
},
{ $project: { _id: 0,
test: "$$order_item",
date: { name: "$Uniprot_ID",
date: "$Min_Max_Of_the_Ft_chain"}
}},
],
as:"cleavage_sites"
}
}
])
最终我想用一个局部变量来复制“P62258” $Protein_ID
希望你能帮忙, 尝试了一切都没有成功。
【问题讨论】:
-
那么对于
MSP_Propsper集合中得分高于0.7 的每个文档,您要附加来自Uniprot_New_Entries的每个包含“P62258”的文档吗?如果字符串“P62258”来自原始文档,请通过let中的字段名称引用它,并在匹配的 $expr 中构建正则表达式。 -
嗨,乔,是的,我想附上所有包含 P62258 的文档。这个变量将一直在变化,因为它将是一个来自 MSP_Propsper 集合的变量,变量名为 $Protein。只是为了更容易解释,我对 P62258 进行了硬编码。但不知何故,当由 let 函数定义时,mongoDB 不允许我在匹配正则表达式中使用该变量。
-
new Regexp在将查询发送到 mongod 节点之前在客户端进行评估,因此它的值不可能根据管道中的文档而改变。 -
谢谢!这里的答案有所帮助。
标签: database mongodb variables pipeline let