首页 > 解决方案 > MongoDB 和 Mongoose,保存嵌套的对象数组 - Node.js

问题描述

我正在尝试将嵌套的对象数组保存到我的 MongoDB 集合中,但该应用程序仅将第一个对象保存在嵌套的 BankAccountsArray 中,我尝试使用 .markModified() 方法但没有成功。我已经附上了从前端部分接受的数据+我的模型模式+路线,谢谢你的帮助!

接受的前端数据:

 {
      companyHoldingPercentage: '10%',
      BankAccountsArray: [
        {
          bankAccountNumber: '32',
          bankBranchNumber: '55',
          bankName: 'abc'
        },
        {
          bankAccountNumber: '3123',
          bankBranchNumber: '412',
          bankName: 'cde'
        }
      ]
    }

模型:

const mongoose = require("mongoose");

const BankAccountsArraySchema = mongoose.Schema({
  bankName: String ,
  bankBranchNumber: String ,
  bankAccountNumber: String
}
);

const BankAccountsIndexSchema = mongoose.Schema({
  companyHoldingPercentage: String ,
  BankAccountsArray: [BankAccountsArraySchema]

});
module.exports = mongoose.model(
  "bank-accounts-object",
  BankAccountsIndexSchema
);

路线:

var express = require("express");
var router = express.Router();
const BankAccountsIndexModel = require("../Models/BankAccountsIndexModel");
router
  .route("/BankAccountsIndexRoute")
  .get(async (req, res, next) => {
    BankAccountsIndexModel.find((err, collection) => {
      if (err) {
        console.log(err);
      } else {
        res.json(collection); 
      }
    });
  })
  .post(async (req, res, next) => {
    console.log(req.body);

    const {
      companyHoldingPercentage,
      BankAccountsArray: [{ bankName, bankBranchNumber, bankAccountNumber }],
    } = req.body;

    try {
      const NewBankAccountsIndexModel = new BankAccountsIndexModel({
        companyHoldingPercentage,
        BankAccountsArray: [{ bankName, bankBranchNumber, bankAccountNumber }],
      });

       NewBankAccountsIndexModel.markModified(req.body.BankAccountsArray);

       NewBankAccountsIndexModel.save();
      // res.json(bankAccount);
    } catch (err) {
      console.error(err.message);
      res.status(500).send("Server error");
    }
  })

module.exports = router;

标签: node.jsmongodbmongoosebackendmongoose-schema

解决方案


您可以尝试.post()像这样重构您的端点:

.post(async (req, res, next) => {
    try {
      let new_bank_account = await BankAccountsIndexModel.create(req.body);
      res.status(200).json(new_bank_account);
    } catch (err) {
      console.error(err.message);
      res.status(500).send("Server error");
    }
  })

推荐阅读