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

Posted

技术标签:

【中文标题】如何在嵌套数组mongodb中插入数据?【英文标题】:How to insert data in nested arrays mongodb? 【发布时间】:2021-06-10 14:49:11 【问题描述】:

这是我存储在 mongodb 中的帖子模型。

const PostSchema = new mongoose.Schema(
  text: 
    type: String,
    required: "Name is required",
  ,

  photo: 
    data: Buffer,
    contentType: String,
  ,
  likes: [ type: mongoose.Schema.ObjectId, ref: "User" ],
  comments: [
    
      text: String,
      created:  type: Date, default: Date.now ,
      postedBy:  type: mongoose.Schema.ObjectId, ref: "User" ,
      likes: Number,
      incomments:[text:String,postedBy: type: mongoose.Schema.ObjectId, ref: "User" ]
    ,
  ],
  postedBy:  type: mongoose.Schema.ObjectId, ref: "User" ,

我想在 cmets 数组中插入 cmets,即在 cmets 数组中的 incmets 数组中插入 cmets。

const commentincomment=(req,res)=>
  Post.findOneAndUpdate(
    "_id":req.body.postId,
    "comments.text":req.body.comment,
    "comments.postedBy":req.body.postedBy
    ,
    $push:"comments.$.incomments":
      text:req.body.comtext,
      postedBy:req.body.userId
    ).exec((err, result) => 
      if (err) 
        return res.status(400).json(
          error: err,
        );
      
      res.json(result);
    );
  

我正在这样做,但数组没有更新。有什么建议吗?

【问题讨论】:

更新前返回文档的结果对象,您是否尝试将选项传递为new: true 以获取更新后的对象? 还是不行。 【参考方案1】:

您需要将包含字符串值的变量postIdpostedBy 类型转换为ObjectId。 试试这个:

const mongoose = require('mongoose');

const commentincomment = (req, res) => 
  let conditions = 
    "_id": mongoose.Types.ObjectId(req.body.postId),
    "comments.text": req.body.comment,
    "comments.postedBy": mongoose.Types.ObjectId(req.body.postedBy)
  ;

  let postDoc = 
    $push: 
      "comments.$.incomments": 
        text: req.body.comtext,
        postedBy: req.body.userId    // Also typecast this if required.
      
    
  

  let options = 
    new: true
  ;

  Post
    .findOneAndUpdate(conditions, postDoc, options)
    .exec((err, result) => 
      if (err) 
        return res.status(400).json(
          error: err,
        );
      
      res.json(result);
    );

【讨论】:

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

如何使用 mongoose 和 NodeJs 在 Mongodb 的数组字段中插入数据

我在 PHP 中插入带有地理空间数据的 Mongodb 记录时遇到问题

流星mongodb用_id插入一个嵌套的对象数组

如何使用 Mongoose 在 MongoDB 中插入 JSON 数组

如何使用关系在laravel中的数据库中插入嵌套的二维数组

将对象数组插入 MongoDB