我有两个收藏集Users
和Notes
。这两个集合都包含一个id
属性,而Notes
集合具有一个userid
,这是Users
集合中某些用户的ID。
现在,我正在尝试将一些用户信息汇总(加入)到Notes
中:
db.getCollection("Notes").aggregate(
{
"$lookup": {
"from": "Users",
"let": {
"idForeignField": "$id"
},
"pipeline": [
{
"$match": {
"$expr": {
"$and": [{
"$eq": ["$userid", "$$idForeignField"]
}]
}
}
}
],
"as": "Users#joined"
}
}
);
我在空Users#joined
数组中得到的内容。为什么?我的查询不应该工作吗?这是由于两个集合都具有id
属性这一事实引起的吗?如果是,我该如何告诉let
和match
什么是正确的收藏品?
更新:或者更简单的查询也可以:
db.getCollection("Notes").aggregate(
{
$lookup:
{
from: "Users",
localField: "userid",
foreignField: "id",
as: "Users#joined"
}
}
);
但是我想使用let
和管道来添加更多match
条件。
谢谢。
答案 0 :(得分:0)
您的let
变量必须为userid
db.getCollection("Notes").aggregate([
{ "$lookup": {
"from": "Users",
"let": { "ifForeignField": "$userid" },
"pipeline": [
{ "$match": { "$expr": { "$and": [{ "$eq": ["$id", "$$ifForeignField"] }] }}}
],
"as": "Users#joined"
}}
])