如何使用nodejs中的mongoose将对象数组和嵌套对象数组插入mongodb

时间:2018-01-13 13:25:02

标签: javascript node.js mongodb mongoose

我知道有类似的问题已经可用,但所有这些问题只涉及嵌套对象的数组,但我的查询是对象数组,数组中的每个对象都包含嵌套对象。所以在这种情况下,其他问题对我没有帮助。

我的查询是我想在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
      });
    });
};

我可以使用上述架构成功保存记录:)

1 个答案:

答案 0 :(得分:0)

@Marventus的不时帮助解决了这个问题。非常感谢@Marventus你的时间:)

问题架构:

如果你看看我的json(在我的问题中)它实际上是一个类别数组,每个类别都有自己的子类别,也是一个数组。因此,如果您查看下面的模式,我已将name,value,createdAt,updatedAt声明为普通对象而不是数组。哪个失败了验证。

<?php
$file = fopen("files.txt","r");

while(! feof($file))
  {
  echo fgets($file). "<br />";
  $fileName = fgets($file);
  $myfile = fopen($fileName.'.txt, "w");

  }

fclose($file);
?> 

})

工作架构:我已经将顶级类别更改为数组并且工作正常

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
      } 
}]