我在下面有一个收藏名称用户详情
[{
"userId": "00UPQAARGT7",
"userPreferences": [{
"pId": "59SDS64675A00096D48CB",
"pData": [{
"name": "FORMAT",
"value": "CSV"
},
{
"name": "LAN",
"value": "E"
}
]
},
{
"pId": "59SDS64675A00096D59DB",
"pData": [{
"name": "FORMAT",
"value": "DOC"
},
{
"name": "LAN",
"value": "N"
}
]
}
]},
{
"userId": "02UPQAARST7",
"userPreferences": [
{
"pId": "59SDS64675A00096D48DB",
"pData": [{
"name": "FORMAT",
"value": "CSV"
},
{
"name": "LAN",
"value": "N"
}
]
},
{
"pId": "59SDS64675A00096D59DB",
"pData": [{
"name": "FORMAT",
"value": "PPT"
},
{
"name": "LAN",
"value": "N"
}
]
}
]}
] 并有另一个收集产品
[{
"pId": "59SDS64675A00096D48CB",
"rInfo": {
"format": "TAB"
},
"LAN": "P",
"cPro": "TRUE"
},
{
"pId": "59SDS64675A00096D48CB",
"rInfo": {
"format": "SHAPE"
},
"LAN": "N",
"cPro": "FALSE"
},
{
"pId": "59SDS64675A00096D48DB",
"rInfo": {
"format": "CSV"
},
"LAN": "E",
"cPro": "TRUE"
},
{
"pId": "59SDS64675A00096D48DB",
"rInfo": {
"format": "CSV"
},
"LAN": "E",
"cPro": "TRUE"
},
{
"pId": "59SDS64675A00096D59DB",
"rInfo": {
"format": "SQL"
},
"LAN": "E",
"cPro": "TRUE"
}
]
现在我想使用mongodb查询从products collection中获取匹配pId的所有用户,其中userId.userPreferences.pData名称/值组合与products.rInfo.format和products.LAN基本输出将在下面匹配,任何帮助
[{
"userId": "00UPQAARGT7",
"userPreferences": [{
"pId": "59SDS64675A00096D59DB"
}]
},
{
"userId": "02UPQAARST7",
"userPreferences": [{
"pId": "59SDS64675A00096D59DB"
}]
}]
答案 0 :(得分:0)
您可以使用聚合阶段,我将解释查询中的4个阶段。
查询:
db.name.aggregate([
{
$unwind: "$userPreferences"
},
{
$lookup:
{
from: "products",
localField: "userPreferences.pId",
foreignField: "pId",
as: "product"
}
},
{
$project: {
userId: 1,
"userPref": "$product.pId",
}
},
{
$group : { _id : "$userId" }
}
]);