我有以下檔案:
{
_id: ObjectId('111111111111111111114444'),
books: [
{
id: ObjectId('111111111111111111113333'),
pictures: []
},
{
id: ObjectId('111111111111111111112222'),
pictures: []
}
],
// others attributes
}
我需要做的是將一個元素添加到pictures. 請記住,我有documentIdwhich 是檔案的 id,而bookIdwhich 是books元素的 Id 。
如果我想將元素添加{description: "nice picture"}到111111111111111111114444書中的檔案1111111111111111111113333,更新后的檔案看起來像
{
_id: ObjectId('111111111111111111114444'),
books: [
{
id: ObjectId('111111111111111111113333'),
pictures: [
{
description: "nice picture"
}
]
},
{
id: ObjectId('111111111111111111112222'),
pictures: []
}
],
// others attributes
}
uj5u.com熱心網友回復:
詢問
- 管道更新需要 MongoDB >= 4.2
- 過濾“_id”
- 如果
id=2合并物件,則在書籍上映射,其中包含新元素的圖片 - 否則
id=2不換書
*我使用 1,2,3 作為 ids(它的代碼相同)
測驗代碼在這里
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"}}}}])
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/350931.html
標籤:数组 MongoDB mongodb-查询 聚合框架
