【问题标题】:Problem in Nested Arrays in Mongoose and NodeJSMongoose 和 NodeJS 中嵌套数组的问题
【发布时间】:2020-11-28 04:08:59
【问题描述】:

我有这个复杂的类别架构,其中包含一组子类别,每个子类别都有一组书籍..

有人可以帮我为此类别架构发出正确的 POST 请求,我希望请求正文看起来像该架构以包含嵌套在其中的类别一个嵌套在每个子类别中的子类别数组一个带有 的书籍数组MongooseNodeJS。这是架构:-

{
    "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);
  }

【问题讨论】:

    标签: node.js post mongoose mongoose-schema


    【解决方案1】:

    我相信您的架构可能如下所示 (subdocuments):

    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”。

    【讨论】:

    • 我明白了,但是如何使用 Postman 在 POST 请求中发送它?
    • 例如,您可以在 body -> raw -> application/json 中发布数据。欢迎阅读更多关于如何使用 Postman 的信息:medium.com/@thejasonfile/…
    • 感谢您的帮助
    猜你喜欢
    • 2017-09-05
    • 2019-03-25
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多