我正在尝试在 Category
和 Services
模型之间创建一对多关系。
我有两个模式:Category
和 Service
。
Category
架构包含 services
数组。
Service
架构持有 category
_id。
我正在尝试检索包括 Categories
在内的所有 services
。
Category
架构:
import mongoose from 'mongoose';
const categoriesModel = new mongoose.Schema(
{
category: {
type: String,
required: true,
},
services: [{ type: mongoose.SchemaTypes.ObjectId, ref: 'Service' }],
},
{ timestamps: true }
);
export const Category = mongoose.model('Category', categoriesModel);
Service
架构:
import mongoose from 'mongoose';
const serviceSchema = new mongoose.Schema(
{
serviceName: {
type: String,
required: true,
},
description: {
type: String,
required: true,
},
images: {
type: Array,
image: Buffer,
required: true,
},
category: {
type: mongoose.SchemaTypes.ObjectId,
ref: 'Category',
required: true,
},
},
{ timestamps: true }
);
export const Service = mongoose.model('Service', serviceSchema);
用于检索所有 Categories
包括 Services
的 HTTP 获取请求:
export const getAllCategories = async (req, res) => {
try {
const docs = await Category.find({}).populate({
path: 'services',
model: 'Service',
});
console.log(docs);
res.status(200).json({ data: docs });
} catch (err) {
res.status(400).json(err.message);
}
};
这是我从上述请求中得到的响应:
{
"services": [],
"_id": "60affe06c71901281d3d820d",
"category": "Electricity"
},
我尝试了不同的方法来populate
services
,但都没有奏效。
到目前为止我尝试过的:
向 services
属性添加额外的嵌套。
向 populate
参数添加对象:
{
path: 'services',
model: 'Service',
}
删除现有数据并发布额外数据。
有趣的事实。单独检索每个 Service
,service
数据包括它被分配到的实际类别:
export const getAllServices = async (req, res) => {
try {
const doc = await Service.find({}).populate('category');
res.status(200).json({ data: doc });
} catch (err) {
res.status(400).json(err);
}
};
关于在检索 services
中包含 categories
有什么我遗漏的吗?这真的很有趣,因为不知何故实际的 services
数据是 []
。
EDIT:category
集合中的每个 Categories
都有空的 services
数组。 services
是动态添加的,对于特定的 null
,它们可能是 category
,直到用户添加服务并为其分配 category
。这是禁止的吗?在创建新的 category
时,我是否需要查找特定的 service
并将特定的 category
添加到 service
?如果是,则需要向 Category
添加额外的 services.controller.js
模型并找到 category
。这真的是一个合适的解决方案吗?