到目前为止,这就是我所拥有的。这是我的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,
},
},
],
})
这是我试图用来更新注释数组文本字段的更新路线
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 Object]”,却找不到解决方法。有任何想法吗?谢谢!
您的代码中的问题是您要将4个参数传递给该findOneAndUpdate
函数。第四个参数是一个接受函数的回调:
(err /* an error if occurred */, doc /* the updated document */) => {}
为了解决这个问题,您需要将最后两个参数组合成一个对象,例如:
{
arrayFilters: [{'comment._id': req.params.comment_id }],
new: true
}
最终查询:
const updatedAnswer = await Answer.findOneAndUpdate(
{ _id: req.params.answer_id },
{
$set: { 'comments.$[comment].text': formattedAnswer },
},
{
arrayFilters: [{'comment._id': req.params.comment_id }],
new: true
}
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句