【发布时间】:2020-08-07 23:36:33
【问题描述】:
假设我有一个采购订单文档,并且该采购订单文档具有供应商和出口的 ID,它们都是单独的文档(*未嵌入)。
当用户从客户端这样查询时我想要什么“给我采购订单文件,其中(采购订单参考号或供应商名称或商店名称)类似于“Otilia”
到目前为止我所做的聚合查询是这样的:
[
{
"$lookup":{
"from":"outlets",
"localField":"outlet",
"foreignField":"_id",
"as":"outlets"
}
},
{
"$lookup":{
"from":"suppliers",
"localField":"supplier",
"foreignField":"_id",
"as":"suppliers"
}
},
{
"$match":{
"$and":[
{
"$or":[
{
"outlets.name":{
"$regex":".*Otilia.*",
"$options":"i"
},
"referenceNumber":{
"$regex":".*Otilia.*",
"$options":"i"
},
"suppliers.name":{
"$regex":".*Otilia.*",
"$options":"i"
}
}
]
}
]
}
},
{
"$sort":{
"outlets.name":1,
"_id":1
}
}
]
什么是有效的: 如果我从 $or 数组中删除两个其他对象,看起来像这样
[
{
"$lookup":{
"from":"outlets",
"localField":"outlet",
"foreignField":"_id",
"as":"outlets"
}
},
{
"$lookup":{
"from":"suppliers",
"localField":"supplier",
"foreignField":"_id",
"as":"suppliers"
}
},
{
"$match":{
"$and":[
{
"$or":[
{
"suppliers.name":{
"$regex":".*Otilia.*",
"$options":"i"
}
}
]
}
]
}
},
{
"$sort":{
"outlets.name":1,
"_id":1
}
}
]
注意:我使用 $and 是因为它可以是来自客户端的更多过滤器,例如采购订单状态等等。
采购订单文件样本
供应商文件样本:
出口文件样本:
我要达到的结果是查询匹配到的采购订单文件。
【问题讨论】:
-
您能否提供您尝试加入的集合中的示例文档?您能否也提供您希望达到的结果?
-
@LaurenSchaefer 更新了任务,请检查。
标签: mongodb mongoose mongodb-query aggregation-framework