Mongodb 如何使用Mongoose更新嵌套数组?
这就是我目前所拥有的。这是我的AnswerSchema,其中嵌套了一个注释数组,我正在尝试更新该数组Mongodb 如何使用Mongoose更新嵌套数组?,mongodb,express,mongoose,Mongodb,Express,Mongoose,这就是我目前所拥有的。这是我的AnswerSchema,其中嵌套了一个注释数组,我正在尝试更新该数组 const AnswerSchema = new Schema({ user: { type: Schema.Types.ObjectId, ref: 'user', }, question: { type: Schema.Types.ObjectId, ref: 'question',
const AnswerSchema = new Schema({
user: {
type: Schema.Types.ObjectId,
ref: 'user',
},
question: {
type: Schema.Types.ObjectId,
ref: 'question',
},
text: {
type: String,
required: true,
},
name: {
type: String,
},
avatar: {
type: String,
},
views: {
type: Number,
},
date: {
type: Date,
default: Date.now,
},
answerLikes: [
{
user: {
type: Schema.Types.ObjectId,
ref: 'user',
},
},
],
comments: [
{
user: {
type: Schema.Types.ObjectId,
ref: 'user',
},
text: {
type: String,
required: true,
},
name: {
type: String,
},
avatar: {
type: String,
},
commentLikes: [
{
user: {
type: Schema.Types.ObjectId,
ref: 'user',
},
},
],
date: {
type: Date,
default: Date.now,
},
},
],
})
这是我的更新路径,我正试图使用它来更新comments数组文本字段
try {
const updatedAnswer = await Answer.findOneAndUpdate(
{ _id: req.params.answer_id },
{
$set: { 'comments.$[comment].text': formattedAnswer },
},
{
arrayFilters: [{'comment._id': req.params.comment_id }],
},
{ new: true }
)
res.json(updatedAnswer)
我不断收到错误“回调必须是一个函数,得到了[object]”,并且无法找到修复方法。
有什么想法吗?
谢谢 代码中的问题是您正在向
findOneAndUpdate
函数传递4个参数。
第四个参数是接受函数的回调:
(err/*如果发生错误*/,doc/*更新的文档*/)=>{}
为了解决这个问题,您需要将最后2个参数组合成一个对象,如:
{
arrayFilters:[{'comment.\u id':req.params.comment\u id}],
新:真的
}
最后查询:
const updatedAnswer=wait Answer.findOneAndUpdate(
{u id:req.params.answer\u id},
{
$set:{'comments.$[comment].text':formattedAnswer},
},
{
arrayFilters:[{'comment.\u id':req.params.comment\u id}],
新:真的
}
)
findOneAndUpdate函数中的第四个参数包含一个回调函数,该函数就是错误所在
试试这个
try{
const updatedAnswer = await Answer.findOneAndUpdate(
{ _id: req.params.answer_id },
{
$set: { 'comments.$[comment].text': formattedAnswer },
},
{
arrayFilters: [{'comment._id': req.params.comment_id }],
new: true
}
);
res.json(updatedAnswer);
}catch(err){
//console.log(err)
}