更新 mongodb 中对象数组的一个元素
update one element of array of objects in mongodb
我有以下文件:
{
_id: ObjectId('111111111111111111114444'),
books: [
{
id: ObjectId('111111111111111111113333'),
pictures: []
},
{
id: ObjectId('111111111111111111112222'),
pictures: []
}
],
// others attributes
}
我需要做的是给pictures
添加一个元素。请记住,我有 documentId
这是文档的 ID,bookId
这是 books.[=17 的元素的 ID =]
如果我想将元素 {description: "nice picture"}
添加到文档 111111111111111111114444 中 111111111111111111113333 中,更新后的文档将看起来像
{
_id: ObjectId('111111111111111111114444'),
books: [
{
id: ObjectId('111111111111111111113333'),
pictures: [
{
description: "nice picture"
}
]
},
{
id: ObjectId('111111111111111111112222'),
pictures: []
}
],
// others attributes
}
查询
- 管道更新需要 MongoDB >= 4.2
- 过滤“_id”
- 如果
id=2
将对象与包含新元素的图片合并,则在书籍上进行映射
- else if not
id=2
不换书
*我使用 1,2,3 作为 id(相同的代码)
update({"_id" : 1},
[{"$set":
{"books":
{"$map":
{"input": "$books",
"in":
{"$cond":
[{"$eq": ["$$book.id", 2]},
{"$mergeObjects":
["$$book",
{"pictures":
{"$concatArrays":
["$$book.pictures", [{"description": "nice picture"}]]}}]},
"$$book"]},
"as": "book"}}}}])
编辑
查询
- 如果图片不是数组(或不存在),则创建一个空数组
update({"_id" : 1},
[{"$set":
{"books":
{"$map":
{"input": "$books",
"in":
{"$cond":
[{"$eq": ["$$book.id", 2]},
{"$mergeObjects":
["$$book",
{"pictures":
{"$concatArrays":
[{"$cond":
[{"$isArray": ["$$book.pictures"]}, "$$book.pictures",
[]]},
[{"description": "nice picture"}]]}}]},
"$$book"]},
"as": "book"}}}}])
我有以下文件:
{
_id: ObjectId('111111111111111111114444'),
books: [
{
id: ObjectId('111111111111111111113333'),
pictures: []
},
{
id: ObjectId('111111111111111111112222'),
pictures: []
}
],
// others attributes
}
我需要做的是给pictures
添加一个元素。请记住,我有 documentId
这是文档的 ID,bookId
这是 books.[=17 的元素的 ID =]
如果我想将元素 {description: "nice picture"}
添加到文档 111111111111111111114444 中 111111111111111111113333 中,更新后的文档将看起来像
{
_id: ObjectId('111111111111111111114444'),
books: [
{
id: ObjectId('111111111111111111113333'),
pictures: [
{
description: "nice picture"
}
]
},
{
id: ObjectId('111111111111111111112222'),
pictures: []
}
],
// others attributes
}
查询
- 管道更新需要 MongoDB >= 4.2
- 过滤“_id”
- 如果
id=2
将对象与包含新元素的图片合并,则在书籍上进行映射 - else if not
id=2
不换书
*我使用 1,2,3 作为 id(相同的代码)
update({"_id" : 1},
[{"$set":
{"books":
{"$map":
{"input": "$books",
"in":
{"$cond":
[{"$eq": ["$$book.id", 2]},
{"$mergeObjects":
["$$book",
{"pictures":
{"$concatArrays":
["$$book.pictures", [{"description": "nice picture"}]]}}]},
"$$book"]},
"as": "book"}}}}])
编辑
查询
- 如果图片不是数组(或不存在),则创建一个空数组
update({"_id" : 1},
[{"$set":
{"books":
{"$map":
{"input": "$books",
"in":
{"$cond":
[{"$eq": ["$$book.id", 2]},
{"$mergeObjects":
["$$book",
{"pictures":
{"$concatArrays":
[{"$cond":
[{"$isArray": ["$$book.pictures"]}, "$$book.pictures",
[]]},
[{"description": "nice picture"}]]}}]},
"$$book"]},
"as": "book"}}}}])