mongodb - 查找聚合中的局部变量不起作用
问题描述
我有两个系列,call
和contact
.
我想加入他们并在通话记录中显示联系人姓名。下面的代码是我尝试过的。
附言。当我更改它时"d.v":"$mobile"
,"d.v":"some number"
它可以工作,但是当我使用变量不起作用时,我的问题在哪里?
{
from: 'contact',
let: {"mobile":"$user"},
pipeline:[
{
"$project":{
d:{$objectToArray:"$data"},
doc:"$$ROOT",
}
},
{
"$unwind":{
path: "$d",
preserveNullAndEmptyArrays: true
}
},
{
"$match":{
"d.v":"$mobile"
}
},
],
as: 'name'
}
解决方案
如文档中所述:
要在管道阶段引用变量,请使用“$$”语法。
...
$match 阶段需要使用 $expr 运算符来访问变量。$expr 运算符允许在 $match 语法中使用聚合表达式。
在更改这两个以匹配要求后,您的阶段将如下所示:
db.call.aggregate([
{
"$lookup": {
from: "contact",
let: {
"mobile": "$user"
},
pipeline: [
{
"$project": {
d: {
$objectToArray: "$data"
},
doc: "$$ROOT",
}
},
{
"$unwind": {
path: "$d",
preserveNullAndEmptyArrays: true
}
},
{
"$match": {
$expr: {
$eq: [
"$$mobile",
"$d.v"
]
}
}
},
],
as: "name"
}
}
])
推荐阅读
- java - 将附加参数传递给 HTTP @DELETE 方法的正确方法是什么
- r - 为什么我的第一列将成为数据框中的第 0 列?
- android - 从android studio加载多层Json文件不一致
- android - 为什么变量数据突然变成了item
- javascript - 找不到 SAPUI5 格式化程序函数
- javascript - nodejs在对象标题中使用局部变量
- database - Postgres 错误:块 xxx 中的页面标题无效,但在使用“排序方式”运行时很好
- python - 从多个字典中检索数据
- javascript - 会话存储购物车
- tensorflow - 不平衡数据集上的一类文本分类