Наличие двух моделей: Supplier
и SupplierType
- поле supplier_type
на модели Supplier
содержит ссылку ObjectId
на соответствующий документ supplier_type
.
Мне нужно получить все Suppliers
, где Supplier.supplier_type.name
- схема "Пекарей"
Supplier
(сокращенная для краткости):
const supplierSchema = new mongoose.Schema({
name: {
type: String,
required: true,
minlength: 2,
maxlength: 255,
},
...
supplier_type: { type: ObjectId, ref: 'SupplierType' },
});
Supplier Type
схема:
const supplierTypeSchema = new mongoose.Schema({
name: {
type: String,
required: true,
minlength: 2,
maxlength: 50,
},
...
});
Типичный Supplier
документ - где использовалось Supplier.supplier_type.populate()
:
{
...
"_id": "5e9604d45c18767097e00059",
"name": "Benny's",
"supplier_type": {
"suppliers": [
"5e9604d45c18767097e00059"
],
"_id": "5e8f7e2eca14f14e36785b8d",
"name": "Bakers",
"createdAt": "2020-04-09T19:57:34.731Z",
"updatedAt": "2020-04-14T18:48:21.853Z",
"__v": 0
},
...
},
Запрос:
const supplier = await SupplierType.aggregate([
{
$match: {
name: 'Bakers',
},
},
{
$lookup: {
from: 'supplier',
localField: 'pk',
foreignField: 'id',
as: 'supplier',
},
},
{
$project: {
supplier: 1,
},
},
])
console.log('LOG: Supplier: ', supplier);
if (!supplier) return res.status(404).send({ error: 'Supplier not found', code: 609 });
res.send({ data: supplier });
Возвращает:
{
"data": [
{
"_id": "5e8f7e2eca14f14e36785b8d",
"supplier": []
}
]
}