如何对本地和外部数组字段执行Mongodb$查找
正在尝试对对象中的本地数组字段执行$lookup s 查询案例集合:如何对本地和外部数组字段执行Mongodb$查找,mongodb,aggregation-framework,Mongodb,Aggregation Framework,正在尝试对对象中的本地数组字段执行$lookup s 查询案例集合: { "no" : "2020921008981", "sale" : { "soldItems" : [ { "itemId" : "5b55ac7f0550de00210a3b24", }, { "itemId" : "5b55ac7f0550de00215584re",
{
"no" : "2020921008981",
"sale" : {
"soldItems" : [
{
"itemId" : "5b55ac7f0550de00210a3b24",
},
{
"itemId" : "5b55ac7f0550de00215584re",
}
],
"bills" : [
{
"billNo" : "2020921053467",
"insurancePlanId" : "160",
},
{
"billNo" : "2020921053467",
"insurancePlanId" : "170",
}
]
}
}
{
"_id" : ObjectId("5b55ac7f0550de00210a3b24"),
"code" : "ABCDE"
},
{
"_id" : ObjectId("5b55ac7f0550de00215584re"),
"code" : "PQRST"
}
{
"_id" : ObjectId("5b55aca20550de00210a6d25"),
"name" : "HIJKL"
"plans" : [
{
"_id" : "160",
"name" : "UVWZ",
},
{
"_id" : "161",
"name" : "LMNO",
}
]
},
{
"_id" : ObjectId("5b55aca20550de00210a6d25"),
"name" : "WXYZ"
"coveragePlans" : [
{
"_id" : "169",
"name" : "5ABC",
},
{
"_id" : "170",
"name" : "4XYZ",
}
]
}
物品收集:
{
"no" : "2020921008981",
"sale" : {
"soldItems" : [
{
"itemId" : "5b55ac7f0550de00210a3b24",
},
{
"itemId" : "5b55ac7f0550de00215584re",
}
],
"bills" : [
{
"billNo" : "2020921053467",
"insurancePlanId" : "160",
},
{
"billNo" : "2020921053467",
"insurancePlanId" : "170",
}
]
}
}
{
"_id" : ObjectId("5b55ac7f0550de00210a3b24"),
"code" : "ABCDE"
},
{
"_id" : ObjectId("5b55ac7f0550de00215584re"),
"code" : "PQRST"
}
{
"_id" : ObjectId("5b55aca20550de00210a6d25"),
"name" : "HIJKL"
"plans" : [
{
"_id" : "160",
"name" : "UVWZ",
},
{
"_id" : "161",
"name" : "LMNO",
}
]
},
{
"_id" : ObjectId("5b55aca20550de00210a6d25"),
"name" : "WXYZ"
"coveragePlans" : [
{
"_id" : "169",
"name" : "5ABC",
},
{
"_id" : "170",
"name" : "4XYZ",
}
]
}
保险托收:
{
"no" : "2020921008981",
"sale" : {
"soldItems" : [
{
"itemId" : "5b55ac7f0550de00210a3b24",
},
{
"itemId" : "5b55ac7f0550de00215584re",
}
],
"bills" : [
{
"billNo" : "2020921053467",
"insurancePlanId" : "160",
},
{
"billNo" : "2020921053467",
"insurancePlanId" : "170",
}
]
}
}
{
"_id" : ObjectId("5b55ac7f0550de00210a3b24"),
"code" : "ABCDE"
},
{
"_id" : ObjectId("5b55ac7f0550de00215584re"),
"code" : "PQRST"
}
{
"_id" : ObjectId("5b55aca20550de00210a6d25"),
"name" : "HIJKL"
"plans" : [
{
"_id" : "160",
"name" : "UVWZ",
},
{
"_id" : "161",
"name" : "LMNO",
}
]
},
{
"_id" : ObjectId("5b55aca20550de00210a6d25"),
"name" : "WXYZ"
"coveragePlans" : [
{
"_id" : "169",
"name" : "5ABC",
},
{
"_id" : "170",
"name" : "4XYZ",
}
]
}
期望输出:
{
"no" : "2020921008981",
"sale" : {}
"insurances" : "HIJKL \n WXYZ",
"items" : [
{
"_id" : ObjectId("5b55ac7f0550de00210a3b24"),
"code" : "ABCDE"
},
{
"_id" : ObjectId("5b55ac7f0550de00215584re"),
"code" : "PQRST"
}
]
}
尝试使用项
集合中的本地itemRefId
字段进行查找。并使用本地保险计划ID
从保险
集合中查找,然后$reduce
将返回的数组还原为保险
字段所需的格式:
{
$lookup:
{
from: "item",
let: { iid: "$sale.soldItems.itemId" },
pipeline: [
{
$match: {
$expr: {
$in: ["$_id", {
$map: {
input: "$$iid",
in: { $_id: "$$this" }
}
}
]
}
}
}
],
as: "items"
}
},
{
$lookup:
{
from: "insurance",
let: { iid: "$sale.insurances.insurancePlanId" },
pipeline: [
{
$match: {
$expr: {
$in: ["$insurance.plans._id", {
$map: {
input: "$$iid",
in: { $toObjectId: "$$this" }
}
}
]
}
}
}
],
as: "insurancesList"
}
},
{
$addFields: {
insurances: {
$reduce: {
input: "$insurancesList.name",
initialValue: "",
in: {
$cond: [ { "$eq": [ "$$value", "" ] }, "$$this", { $concat: [ "$$value", "\n", "$$this" ] } ]
}
}
}
}
}
此尝试返回mongodb错误。任何有助于获得所需输出的帮助都将不胜感激 db.case.aggregate([
{
$lookup:{
来自:“保险”,
let:{IPID:$salesOrder.invoices.insurancePlanId},
管道:[
{
$unwind:“$Coverage计划”
},
{
$match:{$expr:{$in:[“$coverageplan.\u id”,“$$ipid”]}
},
{
$project:{u id:0,名称:1}
}
],
as:“保险”
}
},
{
$lookup:{
从:“物品”,
let:{iid:$salesOrder.purchaseItems.itemRefId},
管道:[
{
$match:{
$expr:{
$in:[“$\u id”{
$map:{
输入:“$$iid”,
在:{$toObjectId:$$this}
}
}
]
}
}
}
],
as:“项目”
}
},
{
$项目:{
_id:0,
案件编号:1,
保险:{
美元减少:{
输入:“$insurances”,
初始值:“”,
在:{$concat:[“$$value”、“$$this.name”、“\n”]}
}
},
项目:1
}
}
])
有没有办法用这种方式将numberprint格式的值串联起来?@dineshalwis不确定,伙计,试试看。如果不起作用,请先用$toString转换。我们如何对此查询执行空检查?因为im获取$in需要一个数组作为第二个参数,所以对于某些记录,找到了:null