mongodb - 如何通过多个本地字段比较对 mongoDB 集合进行链式聚合?
问题描述
这是我的收藏:
用户:
{
user: xxx,
job: xxx,
order: xxxx
}
汽车:
{
order: xxxx,
cost: yyyy
}
飞机:
{
order: xxxx,
cost: yyyy
}
保险:
{
cost: yyyy,
terms: zzzz
}
首先,我想根据匹配“订单”字段的值将“用户”与“汽车”或“飞机”结合起来。之后,我将结果与基于“成本”字段的“保险”集合相结合。
所以,我希望结果是这样的:
{ "user" : xx, ..., "order": dsad, "cars": {}, "plane": {"order": ddsa, "cost": awew} , "terms": sdada},
{ "user" : yy, ..., "order": sawe, "cars": {"order": fda, "cost": qwez}, "plane": {} , "terms": tyrw},
{ "user" : zz, ..., "order": qwez, "cars": {}, "plane": {} , "terms":{} }
我尝试使用 db.users.aggregate() 和 $lookup 如下:
db.check.aggregate([
{
$lookup:
{
from: "cars",
localField: "order",
foreignField: "order",
as: "cars"
}
},
{
$unwind: {path: "$cars", preserveNullAndEmptyArrays: true}
},
{
$lookup:
{
from: "planes",
localField: "order",
foreignField: "order",
as: "planes"
}
},
{
$unwind: {path: "$planes", preserveNullAndEmptyArrays: true}
},
结果是:
{ "user" : xx, ..., "order": dsad, "cars": {}, "plane": {"order": ddsa, "cost": awew}},
{ "user" : yy, ..., "order": sawe, "cars": {"order": fda, "cost": qwez}, "plane": {}},
{ "user" : zz, ..., "order": qwez, "cars": {}, "plane": {}}
但是,我不知道从那里走得更远!
解决方案
您可以将$lookup 与管道一起使用来获得所需的内容。
试试这个 :
db.check.aggregate([
{
$lookup:
{
from: "cars",
localField: "order",
foreignField: "order",
as: "cars"
}
},
{
$unwind: {path: "$cars", preserveNullAndEmptyArrays: true}
},
{
$lookup:
{
from: "planes",
localField: "order",
foreignField: "order",
as: "planes"
}
},
{
$unwind: {path: "$planes", preserveNullAndEmptyArrays: true}
},{
$lookup:{
from : "insurance",
let : {
carCost : "$cars.cost",
planeCost : "$planes.cost"
},
pipeline : [{
$match : {
$expr :{
$or : [{
cost : "$$carCost"
},{
cost : "$$planeCost"
}
]
}
}
}],
as : "insurance"
}
},{
$unwind: {path: "$insurance", preserveNullAndEmptyArrays: true}
},{
$project : {
user:1,
order:1,
cars:1,
planes:1,
terms : "$insurance.terms"
}
}]
推荐阅读
- python - 如何从 Excel 到 DataFrame 读取工作表上的多个表,其中表的位置不确定?
- python-3.x - 调用我的函数时,pyspark updateStateByKey 失败
- c# - 如何使用 HtmlAgilityPack 删除 html 内容的不需要的 pre 和 code 标记
- ios - Firebase 动态链接 handleUniversalLink 在将代码移动到单独的框架后返回 nil dynamicLink
- php - 内部连接的重复记录
- ruby-on-rails - Rails 5 从一个目录重定向到多个目录
- javascript - Node.js JavaScript 数据类型
- swift - NSGridView 的困难
- pandas - 根据条件计算行数
- c - 我的代码中有分段错误,为什么以及如何修复它?