mongodb - 在 mongodb 中加入多个表以从另一个表中获取 id 值数组
问题描述
我正在尝试加入两个表,并使用 mongodb 根据从一个表到另一个表的 id 数组获取一些额外的数据。一个与“用户”相关的集合,另一个是“订单”。用户集合包含与订单相关的 id 数组,订单表包含订单名称和其他数据。我需要列出所有用户的所有订单名称和数据以及用户详细信息。
例如:
User Collection:
User = [{
_id: ObjectId,
userId: 1,
userName: "User1",
OrderIds: [{oId: 1},{oId:3}]
},
{
_id: ObjectId,
userId: 2,
userName: "User2",
OrderIds: [{oId: 2},{oId:3}]
}]
--------------------------------------------
Order Collection:
Order = [{
_id: ObjectId,
orderId: 1
orderName: "Pen"
},
{
_id: ObjectId,
orderId: 2
orderName: "Book"
},
{
_id: ObjectId,
orderId: 3
orderName: "Chair"
}]
---------------------------------------------------
Desired Output:
-----------------------------------------------------
Output = [{
_id: ObjectId,
userId: 1,
userName: "User1",
OrderIds: [{oId: 1,oName: "Pen"},{oId:3,oName: "Chair"}]
},
{
_id: ObjectId,
userId: 2,
userName: "User2",
OrderIds: [{oId: 2,oName: "Book"},{oId:3,oName: "Chair"}]
}]
请任何人有想法,如何做到这一点?
解决方案
使用$lookup
db.users.aggregate([
{
"$lookup": {
"from": "orders",
"localField": "OrderIds.oId",
"foreignField": "orderId",
"as": "OrderIds"
}
}
])
推荐阅读
- unix - SAS 数据集名称无效
- c++ - -O 启用编译(静态 constexpr 数据成员)
- oracle - oracle - 我可以在 clob 中使用 contains 和 near 吗?需要加快查询
- python - Tkinter 将 optionMenu 中选择的选项带入变量以供进一步使用
- smtp - 如何使用 procmail 更改电子邮件标题?
- go - 无需输入网络拨号即可模拟网络连接
- java - 将枚举的 ArrayList 转换为字符串
- java - Java注解接口
- python - 检查 Python 字典中的值是否低于阈值以增加另一个字典中的值
- json - 使用 rss2json “无法处理的实体”读取 Ionic 3 RSS