如何在mongodb的嵌套数组中添加数据

Posted

技术标签:

【中文标题】如何在mongodb的嵌套数组中添加数据【英文标题】:How to add data inside nested array in mongodb 【发布时间】:2022-01-20 08:29:11 【问题描述】:

我在我的 nodejs 项目中使用猫鼬来实现数据库功能。下面是我的模型。

这是 POST 请求:

在 MongoDb 中,数据是这样保存的:

这里owers 数组是空的。 expense.js

const mongoose = require('mongoose');

const ExpenseSchema = new mongoose.Schema(

  userid:
      type: String,
      required: true
  ,
  owers:[
     owerid:
        type: String
      ,
     amt:
       type: Number  
     
    ],
  name:
    type: String,
    required: true
  ,
  amount:
      type: Number,
      require: true
  
);

const expense = mongoose.model('expense',ExpenseSchema);
module.exports = expense;

每当我尝试插入一些东西时,数组显示为空。下面是我的代码:

addExpense.js

const 费用 = require('../models/expense.js');

const addExpense = async (req,res) =>

const name,amount,owerid,amt = req.body;
console.log(name + " " + owerid);
const userid = req.params;

const expens = new expense(userid,name,amount);

try
    const data = await expens.save();
    expens.owers.push("owerid":owerid,"amt":amt);
    res.send("id":data._id); 

catch(error)
    res.send(error);

;

module.exports = addExpense;

有人告诉我我做错了什么。

【问题讨论】:

您的“addExpense.js”代码基本上是说“获取请求中的任何内容并存储为新文档”。您在请求正文中发送了什么,您希望将什么保存在数据库中? 是的,这就是我想要的,但 oweridamt 的值没有存储在数组中。其他所有内容都在存储。 您是否将它们作为数组发送?抱歉,如果我的评论不清楚,但如果没有您尝试保存的数据的示例,这个问题就没有多大意义。 我已经更新了我的帖子看看 HTTP 是一个基于文本的协议,你知道的。 Postman 实际上将这个“图像”转换为 http 请求,并在请求正文中发送 json。您的应用程序在req.body 中收到的同一正文。尝试“保存”邮递员的请求,您将看到您发送了一个平面对象。那里没有owers 数组。 【参考方案1】:

Try This
   const name,amount,owers = req.body;
        console.log(name + " " + owerid);
        const userid = req.params;
        
        const expens = new expense(userid,name,amount);
        
        try
            const data = await expens.save();
        
           //After you can push multiple data like that
        
          JSON.parse(owers).map((value) => 
            data.owers.push(
                owerid: value.owerid,
                amt: value.amt
            )
        )
        
           data.save()
        
            res.send("id":data._id); 
        
        catch(error)
            res.send(error);
        

【讨论】:

Prit,是的,我认为你的回答是可以接受的。 视情况而定。 OP 很有可能只是从邮递员那里发送了错误的请求。如果不超过 1 个“ower”,这个答案是可以接受的。考虑到它是模式中的一个数组,可能并非总是如此。 是的,它可以工作,但是对于 1 个 ower,如果有 2 个 ower 怎么办。 @Digvijay - 完全正确!这就是为什么我再次问你 - 你如何发送数据。好吧,可能不是你,毕竟你在使用邮递员。让我们这样说吧:从客户端、应用程序或任何 HTTP 资源的消费者的请求正文中将发送什么 json。您必须同意数据格式。您在屏幕截图上的邮递员中构建查询的方式不允许您发送超过 1 份。 @Digvijay 请尝试像这样将数据传递给邮递员。并尝试我的代码。我确定你添加了不止一个。谢谢。

以上是关于如何在mongodb的嵌套数组中添加数据的主要内容,如果未能解决你的问题,请参考以下文章

在嵌套数组中添加元素,mongodb

嵌套数组中的Mongodb $push

如何在嵌套数组mongodb中插入数据?

将对象添加到java mongodb中的数组

如何将带有对象的数组中的数据动态添加到嵌套数组中?

如何遍历对象数组以便在 Mongodb 嵌套数组中推送数据