mongodb - 当某些文档不包含路径时,mongo updateMany $set 嵌套数组
问题描述
我有一个看似简单的查询来更新 mongo 文档中类似对象的名称。但它失败了,因为并非所有文档都有评论。我应该在文档中寻找什么来解决这个问题并只更新对评论有赞的文档?
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 },
],
},
);
问题是并非所有评论都被喜欢..所以查询抱怨:
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
解决方案
如果您在更新部分查询的匹配部分下添加您正在检查对象中是否likes
存在属性怎么办comments
return this.model.updateMany(
{
"comments.likes": { // <---
$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 },
],
},
);
推荐阅读
- git - Git通过命令行压缩分支时,如何更新消息的日期
- c# - 从同一解决方案中的不同测试项目引用项目中的 C# 命名空间
- python - 有没有办法将 openpyxl 行(存储在列表中)写入新的 Excel 文件?
- c# - 从 DB2 视图中获取数据
- html - 返回顶部锚链接的偏移量
- javascript - 如何将逻辑和状态从主要组件拆分到多个文件
- ios - 无法使用 CGPDFDocumentCreateWithURL 读取 PDF 文档
- javascript - 在 Javascript 烧瓶模板中处理 Python 字典时遇到问题
- apache-beam - 运行 Apache Beam Python SplittableDoFn 时出错
- javascript - 在点击 url 提示时使用 app Html 网页打开