Mongodb 如何使用Mongoose更新嵌套数组?

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',

这就是我目前所拥有的。这是我的AnswerSchema,其中嵌套了一个注释数组,我正在尝试更新该数组

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)
}