如何在嵌套数组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】:
您需要将包含字符串值的变量postId
和postedBy
类型转换为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 记录时遇到问题