我是mongodb的新手,所以我希望这不会成为一个非常基本的问题。我已经进行了一些研究,并尝试应用所发现的内容,但似乎有些东西无法逃脱。
我有两个以下格式的集合:
-----------------------------------------------------------------------
Shop
-----------------------------------------------------------------------
{
"shopId": "1002",
"shopPosId": "10002",
"description": "some description"
}
-----------------------------------------------------------------------
Compte
-----------------------------------------------------------------------
{
"shopId": "9000",
"shopPosId": "0000",
"clientUid": "474192"
}
我想加入这些,在此之前,我想过滤掉没有Shop
字段的shopPosId
个。
这是我的代码:
Compte.aggregate([
{
$match:
{
$and:[{"clientUid":clientUid}]
}
},
{
$lookup:
{
from: "Shop",
localField: "shopId",
foreignField: "shopId",
let: {"Shop.shopPosId": "$shopPosId"},
pipeline: [{$match: {"shopPosId": {"$exists": false}}}],
as: "shopDescr"
}
}]
);
返回的结果是undefined
,这意味着查询没有多大意义(因为实际上我至少应该得到一个空数组)。
这是因为两个集合都具有shopPosId
字段吗? (如果是这样,这行let: {"Shop.shopPosId": "$shopPosId"}
是否应该处理?)
答案 0 :(得分:0)
正如Alex所评论的,您在这里混合使用 $lookup
语法...因此正确的方法是
Compte.aggregate([
{ "$match": { "$and": [{ "clientUid": clientUid }] }},
{ "$lookup": {
"from": "Shop",
"let": { "shopId": "$shopId" },
"pipeline": [
{ "$match": {
"$expr": { "$eq": [ "$shopId", "$$shopId" ] },
"shopPosId": { "$exists": false }
}}
],
"as": "shopDescr"
}}
])