我有兩個集合,call和contact。
我想加入它們并在通話記錄中顯示聯系人的名字。下面的代碼是我所嘗試的。
ps.當我把"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"/span>:{
"d.v":"$mobile"。
}
},
],
as: 'name'。
}
uj5u.com熱心網友回復:
正如docs中規定的那樣:
要在管道階段參考變數,使用"$$"語法。
...
$match階段需要使用$expr運算子來訪問變數。$expr運算子允許在$match語法中使用聚合運算式。
在對這兩處進行修改以符合要求之后,你的階段將看起來像這樣:
db.call.aggregate( [
{
"$lookup"/span>: {
from: "contact",
let: {
"手機": "$user"。
},
pipeline: [
{
"$project": {
d: {
$objectToArray: "$data"。
},
doc: "$ROOT",
}
},
{
"$unwind": {
path: "$d",
preserveNullAndEmptyArrays: true。
}
},
{
"$match"/span>: {
$expr: {
$eq: [
"$$mobile",
"$d.v".
]
}
}
},
],
as: "name"。
}
}
])
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/324682.html
標籤:
上一篇:平均值(nodeJs
下一篇:更新雙重嵌套陣列腳本
