【发布时间】:2017-07-13 06:44:00
【问题描述】:
我有两个集合,我正在尝试对其进行某种查找。我不是 100% 确定如何处理它。
集合 1:员工
{
"data": [
{
"full name": "Keith Richards",
"age": 21,
"userName": "keith1@keith.com",
"employeeDetails": {
"id": 102522
}
},
{
"full name": "Jim Morrison",
"age": 27,
"userName": "jim@jim.com",
"employeeDetails": {
"id": 135522
}
}
]
}
收藏 2:参赛作品
{
"data": [
{
"dateCreated": "02-04-2016",
"billable": true,
"minutes": 150,
"employeeId": {
"id": 102522
}
},
{
"dateCreated": "03-04-2016",
"billable": true,
"minutes": 250,
"employeeId": {
"id": 102522
}
},
{
"dateCreated": "04-04-2016",
"billable": true,
"minutes": 20,
"employeeId": {
"id": 135522
}
}
]
}
您可以看到 Employees 集合中的 employeeDetails.id 与 Entries 中的 employeeId.id 匹配> 收藏。
我正在尝试进行查找,以便将条目中的 id 与员工中的用户名匹配,这样我就可以将名称与条目匹配,所需的结果如下:
{
"data": [
{
"full name": "Keith Richards",
"dateCreated": "02-04-2016",
"minutes": 150,
"employeeId": {
"id": 102522
}
},
{
"full name": "Keith Richards",
"dateCreated": "03-04-2016",
"minutes": 250,
"employeeId": {
"id": 102522
}
},
{
"full name": "Jim Morrison",
"dateCreated": "04-04-2016",
"minutes": 20,
"employeeId": {
"id": 135522
}
}
]
}
这将允许我得到一个组/总和的最终结果:
- 全名:基思·理查兹
- 分钟:400
- 全名:吉姆·莫里森
- 分钟:20
我尝试了一堆,唯一接近工作的是以下:
db.getCollection('entries')
.aggregate(
[
{
"$lookup": {
"from": "employees",
"localField": "trafficEmployeeId.id",
"foreignField": "employeeDetails.id",
"as": "employees_loaded"
}
}
]
);
这基本上给了我一个包含两个不同数组的集合。
谁能给我建议/解决方案,以最佳方式实现我想要实现的目标?我选择了 MongoDB,因为输入严重依赖 JSON 输入。
【问题讨论】:
标签: json mongodb mongodb-query aggregation-framework