Допустим, у меня есть документ заказа на закупку, и этот документ заказа на поставку имеет идентификаторы поставщика и торговой точки, которые оба являются разделенными документами (* не встроены).
Что я хочу, когда пользователь запрашивает подобное со стороны клиента "предоставьте мне документы заказа на закупку, которые (ссылочный номер заказа на покупку или название поставщика или название торговой точки) похожи на" 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
}
}
]
Что работает: если я удалю буксировку других объектов из $ или массива, который выглядит следующим образом
[
{
"$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
}
}
]
Примечание: я использовал $ и потому что это могло быть больше фильтров со стороны клиента например, статус заказа на поставку и др.
Образец документа заказа на поставку
Supplier document Sample:
outlet document Sample:
введите описание изображения здесь
Результат, которого я хочу добиться, - это сопоставление документов заказов на покупку по запросу.