我有一个像这样的猫鼬模型:
"question": {
"_id": "1234",
"title": "Hi",
"content": "Hello",
"viewed": 34425,
"answers": [{
"vote": 0,
"date": "2015-12-21T13:03:14.334Z",
"author": "john",
"content": "hello",
"comments": []
}, {
"vote": 0,
"date": "2015-12-21T13:05:27.411Z",
"author": "patrick",
"content": "bonjour",
"comments": []
}]
}
我想将评论推送到question.answers[1].comment
,但我无法通过findOneAndUpdate
进行评论。
以下是我的尝试:
MySchema.findOneAndUpdate({_id: questionId},
{$push:
{'answers.$.comments': {
'$each': [comment],
'$position': 1}
}
}, function(err, doc) {...
但我收到此错误:MongoError: exception: The positional operator did not find the match needed from the query. Unexpanded update: answers.$.comments
。
答案 0 :(得分:1)
问题是,要使用位置$
更新运算符,数组字段必须作为查询文档的一部分出现。
MySchema.findOneAndUpdate(
{ "_id": questionId, "question.answers.author": "patrick" },
{ "$push": { "question.answers.$.comments": { "$each": [comment] } } },
function(err, doc) {
//Do something
}
)
如documentation中所述:
如果您知道嵌入文档的数组索引,则可以使用dot notation使用嵌入文档的位置指定文档。
MySchema.findOneAndUpdate(
{ "_id": questionId },
{ "$push": { "question.answers.1.comments": { "$each": [comment] } } },
function(err, doc) {
//Do something
}
)