【发布时间】:2020-10-20 00:41:10
【问题描述】:
我有一个看似简单的查询来更新 mongo 文档中类似对象的名称。但它失败了,因为并非所有文档都有评论。我应该在文档中寻找什么来解决这个问题并只更新对 cmets 有赞的文档?
return this.model.updateMany(
{
comments: {
$exists: true
}
},
{
$set: {
'comments.likes.$[like].actor.firstName': user.firstName,
'comments.likes.$[like].actor.lastName': user.lastName,
},
},
{
multi: true,
arrayFilters: [
{ 'like.actor.username': user.username },
],
},
);
问题是不是所有的 cmets 都喜欢.. 所以查询抱怨:
WriteError: The path 'comments.likes' must exist in the document in order to apply array updates.
完整输出:
WriteError: The path 'comments.likes' must exist in the document in order to apply array updates.
Details:
WriteError({
"index" : 0,
"code" : 2,
"errmsg" : "The path 'comments.likes' must exist in the document in order to apply array updates.",
"op" : {
"q" : {
"comments" : {
"$exists" : true
}
},
"u" : {
"$set" : {
"comments.likes.$[like].actor.firstName" : "GGGJOHN",
"comments.likes.$[like].actor.lastName" : "Carmichael"
}
},
"multi" : true,
"upsert" : false,
"arrayFilters" : [
{
"like.actor.username" : "john.carmichael"
}
]
}
})
WriteError@src/mongo/shell/bulk_api.js:461:48
Bulk/mergeBatchResults@src/mongo/shell/bulk_api.js:841:49
Bulk/executeBatch@src/mongo/shell/bulk_api.js:906:13
Bulk/this.execute@src/mongo/shell/bulk_api.js:1150:21
DBCollection.prototype.updateMany@src/mongo/shell/crud_api.js:655:17
@(shell):1:1
【问题讨论】:
-
嗨,你有没有想过这个问题?我有同样的问题。几乎就像由于某种原因需要将存在作为数组过滤器的一部分。
-
为了记录,我能够用这个答案解决我的问题:stackoverflow.com/questions/58555989/…
-
我没有在肮脏的黑客中编码 - 感谢您提供链接
标签: mongodb