簡體   English   中英

如何在nodejs中使用mongoose將對象數組和嵌套對象數組插入mongodb

[英]how to insert array of objects and array of nested objects into mongodb using mongoose in nodejs

我知道已經有類似的問題可用,但所有這些問題都只討論嵌套對象數組,但我的查詢是對象數組,數組中的每個對象都包含嵌套對象。 所以在這種情況下,其他問題對我沒有幫助。

我的查詢是我想在 nodejs 中使用 mongoose 將以下數據插入到 mongodb 中。

我的 JSON 如下所示

{"categories": [
    {
        "name": "Books & Magazines", 
        "value": 1,
        "subCategories":[
            {
                "name": "Book", 
                "value": 1,
            },
            {
                "name": "Book series", 
                "value": 2,
            }
        ]
    },
    {
        "name": "Books & Magazines", 
        "value": 2,
        "subCategories":[
            {
                "name": "Book", 
                "value": 1,
            },
            {
                "name": "Book series", 
                "value": 2,
            }
        ]
    },
    {
        "name": "Books & Magazines", 
        "value": 3,
        "subCategories":[
            {
                "name": "Book", 
                "value": 1,
            },
            {
                "name": "Book series", 
                "value": 2,
            }
        ]
    }
    ]
}

我對此 JSON 的架構如下所示

const mongoose = require('mongoose'),
Schema = mongoose.Schema;

var CategorySchema = new Schema({
      categories:[{
        name: {
          type: String, 
          required: true, 
          trim: true
        },
        value: {
          type: Number, 
          required: true
        },
        createdAt: {
          type: Date, 
          default: Date.now
        },
        updatedAt: {
          type: Date, 
          default: Date.now
        },
        subCategories:  [{
          name: {
            type: String, 
            required: true, 
            trim: true
          },
          value: {
            type: Number, 
            required: true
          }
        }] 
    }]
})

module.exports = mongoose.model('Page_Categories', CategorySchema);

下面的控制器部分

const Page_Categories = require('../models/categories');

exports.savePageCategories = function (req, res, next) {
    const data = req.body;
    // console.log("Data: ", data.categories)
    const pageCategories = new Page_Categories({ data });
console.log("pageCategories: ", pageCategories)
    pageCategories.save((err, post) => {
      if (err) { return next(err); }

      res.status(201).json({
        user: post
      });
    });
};

我能夠成功保存,但它保存為空記錄。 請看下面

{ "_id" : ObjectId("5a5ae9e7855059417c471784"), "categories" : [ ], "__v" : 
0 }

知道為什么它會插入空記錄嗎?

@Marventus 的幫助解決了這個問題。

如果您查看我的 json(在我的問題中),它實際上是一個類別數組,每個類別都有自己的子類別,這也是一個數組。 因此,如果您查看下面的架構,我已將 name、value、createdAt、updatedAt 聲明為普通對象而不是數組。 驗證失敗。

var CategorySchema = new Schema({
    name: {
      type: String, 
      required: true, 
      trim: true
    },
    value: {
      type: Number, 
      required: true
    },
    createdAt: {
      type: Date, 
      default: Date.now
    },
    updatedAt: {
      type: Date, 
      default: Date.now
    },
    subCategories:  [{
      name: {
        type: String, 
        required: true, 
        trim: true
      },
      value: {
        type: Number, 
        required: true
      } 
    }]
})

工作模式:我已將頂級類別更改為數組並且它有效

const mongoose = require('mongoose'),
Schema = mongoose.Schema;

var CategorySchema = new Schema({
      categories:[{
        name: {
          type: String, 
          required: true, 
          trim: true
        },
        value: {
          type: Number, 
          required: true
        },
        createdAt: {
          type: Date, 
          default: Date.now
        },
        updatedAt: {
          type: Date, 
          default: Date.now
        },
        subCategories:  [{
          name: {
            type: String, 
            required: true, 
            trim: true
          },
          value: {
            type: Number, 
            required: true
          }
        }] 
    }]
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM