node.js - Mongoose 和 NodeJS 中嵌套数组的问题
问题描述
我有这个复杂的类别模式,其中包含一组子类别,每个子类别都有一组书籍..
有人可以帮我为此类别架构发出正确的 POST 请求,我希望请求正文看起来像该架构以包含嵌套在其中的类别一个嵌套在每个子类别中的子类别数组一个带有Mongoose和NodeJS的书籍数组。这是架构:-
{
"categoryName": "engineering",
"subcategories": [
{
"subcategoryName": "chemical enginnering",
"books": [
{
"bookName": "",
"author": "",
"ratings": [3, 4, 5, 3],
"feedbcks": ["awesome book", "very amazing book"],
"price": 222
}
]
},
{
"subcategoryName": "mechanical engineering",
"books": [
{
"bookName": "",
"author": "",
"ratings": [3, 4, 5, 3],
"feedbcks": ["awesome book", "very amazing book"],
"price": 222
}
]
}
]
}
我尝试了这段代码,但没有成功
const category = new Category({
categoryName: req.body.categoryName,
subcategories: [
new SubCategory({
subCategoryName: req.body.subCategoryName,
books: [
new Book({
bookName: req.body.bookName,
price: req.body.price,
ratings: req.body.ratings,
feedbacks: req.body.feedbacks,
author: req.body.author
})
]
})
]
});
try {
const savedCategory = await category.save();
res.send(savedCategory);
} catch (error) {
res.send(error.message);
}
解决方案
我相信您的架构可能看起来像这样(子文档):
const Category = new Schema({
categoryName: String,
subcategories: [{
subcategoryName: String,
books: [{
bookName: String,
author: String,
ratings: Array,
feedbacks: Array,
price: Number
}]
}]
})
或者
const Book = new Schema({
bookName: String,
author: String,
ratings: Array,
feedbacks: Array,
price: Number
})
const Subcategory = new Schema({
subcategoryName: String,
books: [Book]
})
const Category = new Schema({
categoryName: String,
subcategories: [Subcategory]
})
为了保存它,我认为您可以将整个数据对象传递到您的Model
:
const category = {
"categoryName": "engineering",
"subcategories": [
{
"subcategoryName": "chemical enginnering",
"books": [
{
"bookName": "",
"author": "",
"ratings": [3, 4, 5, 3],
"feedbacks": ["awesome book", "very amazing book"],
"price": 222
}
]
},
{
"subcategoryName": "mechanical engineering",
"books": [
{
"bookName": "",
"author": "",
"ratings": [3, 4, 5, 3],
"feedbacks": ["awesome book", "very amazing book"],
"price": 222
}
]
}
]
}
const newCategory = new Category(category);
try {
const savedCategory = await newCategory.save();
res.send(savedCategory);
} catch (error) {
res.send(error.message);
}
当然,这意味着您需要先创建这种对象才能传递它,我以您的数据为例。您可以在前端或后端进行排序,只要对您更有意义。
或者,您可以创建第Category
一个:
const newCategory = new Category({ categoryName: req.body.categoryName })
然后添加剩余元素(使用数组,您可以push
动态使用循环到元素):
const newCategory.subcategories = [{
"subcategoryName": "chemical enginnering",
"books": [
{
"bookName": "",
"author": "",
"ratings": [3, 4, 5, 3],
"feedbacks": ["awesome book", "very amazing book"],
"price": 222
}
]
},
{
"subcategoryName": "mechanical engineering",
"books": [
{
"bookName": "",
"author": "",
"ratings": [3, 4, 5, 3],
"feedbacks": ["awesome book", "very amazing book"],
"price": 222
}
]
}]
等等
这实际上完全取决于您的数据的结构方式以及您如何从前端传递它,但我认为您明白了。
请注意,您的示例数据中有拼写,请将“feedbcks”更改为“feedbacks”。
推荐阅读
- google-apps-script - 在 gmail 插件中使用动态选项列表创建选择(下拉)输入
- c# - 如何在excel中找到带有某个关键字的最后一行
- django - 如何自动更新 Django 中的字段
- amazon-web-services - AWS EMR:集群在用户请求中终止
- ubuntu - Truffle deploy 编译合约但不迁移到网络
- javascript - 汉堡菜单切换 Javascript
- session - 获取所有活动会话 asp.net core 2
- javascript - 我将如何以及在哪里将这两个变量组合在 JavaScript 中?
- azure - ComputerVision API 不允许带有 SAS 令牌的 BlobURL
- angular - Angular 7:更新服务变量时更新组件变量