加入等同于 mongoose/mongodb
Join equivalent with mongoose/mongodb
我的大部分经验都来自 MySQL,我基本上是在尝试与 Mongoose 进行等效的连接。我需要查询所有拥有特定 partner_id 订单的用户。这就是我在 MySQL
中编写查询的方式
SELECT * FROM guestUsers
LEFT JOIN partnerOrders ON guestUsers.id = partnerOrders.guest_user_id
WHERE partnerOrders.partner_id = "TF"
在我的 partnerOrders 模式中,我有 guest_user_id 字段,它是一个引用 guestUsers
的 objectId
guest_user_id: { type: Schema.Types.ObjectId, ref: 'guestUser' }
这是我目前对 mongoose 的了解,但由于我缺乏经验,我可能会完全错误地处理这个问题
const guest_users = await guestUserModel.aggregate( [
{
$lookup: {
from: 'partnerOrders',
localField: '_id',
foreignField: 'guest_user_id',
as: 'partnerOrders',
let: {partner_id: "$partner_id"},
pipeline: [
{$match: {$expr: {$eq: [ "$partner_id", "TF"] }}}
]
}
}
])
任何帮助将不胜感激,感谢您抽出宝贵时间。
查询
- 查找管道以匹配“TF”也
- 展开以分离数组成员
- 与根合并并替换它
- 投影查找字段(信息无论如何都在根目录上移动)
*我无法在您的示例数据上对其进行测试,但我认为有了这个您就可以做到,否则,如果您可以添加示例数据和预期输出。
aggregate(
[{"$lookup":
{"from": "partnerOrders",
"localField": "_id",
"foreignField": "guest_user_id",
"pipeline": [{"$match": {"partner_id": {"$eq": "TF"}}}],
"as": "partnerOrders"}},
{"$unwind":
{"path": "$partnerOrders", "preserveNullAndEmptyArrays": true}},
{"$replaceRoot":
{"newRoot": {"$mergeObjects": ["$partnerOrders", "$$ROOT"]}}},
{"$unset": ["partnerOrders"]}])
我的大部分经验都来自 MySQL,我基本上是在尝试与 Mongoose 进行等效的连接。我需要查询所有拥有特定 partner_id 订单的用户。这就是我在 MySQL
中编写查询的方式SELECT * FROM guestUsers
LEFT JOIN partnerOrders ON guestUsers.id = partnerOrders.guest_user_id
WHERE partnerOrders.partner_id = "TF"
在我的 partnerOrders 模式中,我有 guest_user_id 字段,它是一个引用 guestUsers
的 objectIdguest_user_id: { type: Schema.Types.ObjectId, ref: 'guestUser' }
这是我目前对 mongoose 的了解,但由于我缺乏经验,我可能会完全错误地处理这个问题
const guest_users = await guestUserModel.aggregate( [
{
$lookup: {
from: 'partnerOrders',
localField: '_id',
foreignField: 'guest_user_id',
as: 'partnerOrders',
let: {partner_id: "$partner_id"},
pipeline: [
{$match: {$expr: {$eq: [ "$partner_id", "TF"] }}}
]
}
}
])
任何帮助将不胜感激,感谢您抽出宝贵时间。
查询
- 查找管道以匹配“TF”也
- 展开以分离数组成员
- 与根合并并替换它
- 投影查找字段(信息无论如何都在根目录上移动)
*我无法在您的示例数据上对其进行测试,但我认为有了这个您就可以做到,否则,如果您可以添加示例数据和预期输出。
aggregate(
[{"$lookup":
{"from": "partnerOrders",
"localField": "_id",
"foreignField": "guest_user_id",
"pipeline": [{"$match": {"partner_id": {"$eq": "TF"}}}],
"as": "partnerOrders"}},
{"$unwind":
{"path": "$partnerOrders", "preserveNullAndEmptyArrays": true}},
{"$replaceRoot":
{"newRoot": {"$mergeObjects": ["$partnerOrders", "$$ROOT"]}}},
{"$unset": ["partnerOrders"]}])