【发布时间】:2021-12-06 06:11:03
【问题描述】:
我在 MongoDB 4.0 (pymongo) 中有三个集合
users: [
{name: "John", user_type: "client", society: 1},
{name: "Charles", user_type: "client", society: 1},
{name: "Jessy", user_type: "provider", society: 1},
{name: "Tim", user_type: "provider", society: 2}
]
clients: [
{_id: 1, name: "Client1"}
]
providers: [
{_id: 1, name: "Provider1"},
{_id: 2, name: "Provider2"}
]
我需要根据user_type 值在用户和客户端或提供者之间进行连接,并将其设置为结果中的相同键值。
例如,结果将是:
user : {name: "John", user_type: "client", society: 1, complete_society: {_id: 1, name: "Client1"}}
or
user : {name: "Tim", user_type: "provider", society: 2, complete_society: {_id: 2, name: "Provider2"}}
我现在唯一的解决方案是在两个不同的密钥中执行两个不同的$lookup,然后在请求后重新处理结果
db.users.aggregate([{
"$lookup": {
"from": "clients",
"localField": "society",
"foreignField": "_id",
"as": "client"
}
},
{"$unwind": "$clients"},{
"$lookup": {
"from": "providers",
"localField": "society",
"foreignField": "_id",
"as": "provider"
}
},
{"$unwind": "$providers"}]);
然后做一个 forEach 并设置一个键 complete_society 并删除以前的键。这不是完美的方式,也许在 mongo 中,有一些东西可以做到这一点。
【问题讨论】:
标签: mongodb aggregation-framework pymongo