mongodb - 填充 $lookup 中的特定字段
问题描述
我正在使用聚合来分组和填充结果,如下所示:
{
"$group": {
"_id": "$userId",
"projectId": { "$push": "$projectId" }
}
},
{
"$lookup": {
"from": "users",
"localField": "_id",
"foreignField": "_id",
"as": "user"
}
},
{ $unwind:"$user" },
{
"$lookup": {
"from": "projects",
"localField": "projectId",
"foreignField": "_id",
"as": "projects"
}
}
但我想从该结果中填充特定字段为此我尝试了 $project,但它将 projectId 组合到一个数组中,将 projectName 组合到另一个数组中。下面是我的结果 json:
[
{
"_id": "5c0a29e597e71a0d28b910aa",
"projectId": [
"5c0a2a8897e71a0d28b910ac",
"5c0a4083753a321c6c4ee024"
],
"user": {
"_id": "5c0a29e597e71a0d28b910aa",
"firstName": "Amit"
"lastName": "kumar",
"type": "developer",
"status": "active"
},
"projects": [
{
"_id": "5c0a2a8897e71a0d28b910ac",
"skypeId": "",
"projectName": "LN-PM",
"status": "ongoing",
"assignId": "5c0a2a0a97e71a0d28b910ab"
},
{
"_id": "5c0a4083753a321c6c4ee024",
"skypeId": "",
"status": "pending",
"assignId": "5c0a2a0a97e71a0d28b910ab"
}
]
}
]
现在我想从用户字段中获取唯一的“名字和_id”字段,从项目字段中获取“项目名称和_id”字段
解决方案
您可以将以下聚合与 mongodb 3.6及更高版本一起使用
使用较新的$lookup
语法,您可以在管道$project
内使用 ion$lookup
db.collection.aggregate([
{ "$group": {
"_id": "$userId",
"projectId": { "$push": "$projectId" }
}},
{ "$lookup": {
"from": "users",
"let": { "userId": "$_id" },
"pipeline": [
{ "$match": { "$expr": { "$eq": [ "$_id", "$$userId" ] }}},
{ "$project": { "firstName": 1 }}
],
"as": "user"
}},
{ "$unwind": "$user" },
{ "$lookup": {
"from": "projects",
"let": { "projectId": "$projectId" },
"pipeline": [
{ "$match": { "$expr": { "$in": [ "$_id", "$$projectId" ] }}},
{ "$project": { "projectName": 1 }}
],
"as": "projects"
}}
])
推荐阅读
- vim - 如何使 vimdiff 检测行尾字符的差异(dos vs unix)
- ios - NEHotspotConfiguration 无效的 WPA/WPA2 密码长度
- typescript - JSX 使用 Typescript 泛型来渲染组件而不是使用开关
- kubernetes - 如何仅删除节点镜像 pod 创建?
- c# - 我需要使用表单上的“插入”按钮将值添加到我的数据库中,但出现“单词附近的语法错误”异常
- c++ - UDP数据包可以在wireshark上看到,从代码输出看不到
- excel - 在查询中合并 .csv 文件以通过 UDF 和 ADODB 连接从 Excel 检索其数据
- python - 是否可以创建 ndarray 的 ndarray?(python 2.7,numpy)
- highcharts - Highmaps - 如何从西班牙突出显示加那利群岛
- ionic-framework - 如何将后缀图标添加到 Ionic 4 输入