В MongoDB v 4.2
, которая поддерживает конвейер агрегации в операциях обновления, вы можете попробовать это (вы также можете использовать .updateMany () ):
this.siteModel.update({},
[{
$set: {
'infobox.levels': [{ infobox1: { $mergeObjects: ['$infobox', { 'levels': [] }] } },
{ infobox2: { $mergeObjects: ['$infobox', { 'levels': [] }] } }]
}
}], { multi: true })
Ref: .update ()
Сбор данных:
/* 1 */
{
"_id" : ObjectId("5e4dba9e7f8bc30a75c658fc"),
"data" : 1,
"name" : "noName",
"infobox" : {
"coordx" : 2,
"coordy" : 2,
"midpoint" : {
"coordx" : 1,
"coordy" : 1
}
}
}
/* 2 */
{
"_id" : ObjectId("5e4dbab07f8bc30a75c65ab1"),
"data" : 2,
"name" : "yesName",
"infobox" : {
"coordx" : 4,
"coordy" : 4,
"midpoint" : {
"coordx" : 2,
"coordy" : 2
}
}
}
Документы в БД после операции обновления:
/* 1 */
{
"_id" : ObjectId("5e4dba9e7f8bc30a75c658fc"),
"data" : 1,
"name" : "noName",
"infobox" : {
"coordx" : 2,
"coordy" : 2,
"midpoint" : {
"coordx" : 1,
"coordy" : 1
},
"levels" : [
{
"infobox1" : {
"coordx" : 2,
"coordy" : 2,
"midpoint" : {
"coordx" : 1,
"coordy" : 1
},
"levels" : []
}
},
{
"infobox2" : {
"coordx" : 2,
"coordy" : 2,
"midpoint" : {
"coordx" : 1,
"coordy" : 1
},
"levels" : []
}
}
]
}
}
/* 2 */
{
"_id" : ObjectId("5e4dbab07f8bc30a75c65ab1"),
"data" : 2,
"name" : "yesName",
"infobox" : {
"coordx" : 4,
"coordy" : 4,
"midpoint" : {
"coordx" : 2,
"coordy" : 2
},
"levels" : [
{
"infobox1" : {
"coordx" : 4,
"coordy" : 4,
"midpoint" : {
"coordx" : 2,
"coordy" : 2
},
"levels" : []
}
},
{
"infobox2" : {
"coordx" : 4,
"coordy" : 4,
"midpoint" : {
"coordx" : 2,
"coordy" : 2
},
"levels" : []
}
}
]
}
}