Ma proposition serait la suivante :
db.nrel.component.aggregate([
{ $unwind: "$general.files.file" },
{
$set: {
"general.files.file.version.identifier": {
$ifNull: ["$general.files.file.version.indentifier", "$general.files.file.version.identifier"]
}
}
},
{ $unset: "general.files.file.version.indentifier" },
{ $set: { "general.files.file": ["$general.files.file"] } },
{ $out: "nrel.component" } // carefully - it replaces entire collection.
])
Cependant, cela ne fonctionne que lorsque le tableau general.files.file
n'a qu'un seul document. Il est probable que ce ne sera pas toujours le cas, alors vous pouvez utiliser celui-ci :
db.nrel.componen.aggregate([
{ $unwind: "$general.files.file" },
{
$set: {
"general.files.file.version.identifier": {
$ifNull: ["$general.files.file.version.indentifier", "$general.files.file.version.identifier"]
}
}
},
{ $unset: "general.files.file.version.indentifier" },
{ $group: { _id: "$_id", general_new: { $addToSet: "$general.files.file" } } },
{ $set: { "general.files.file": "$general_new" } },
{ $unset: "general_new" },
{ $out: "nrel.component" } // carefully - it replaces entire collection.
])
1 votes
$rename
ne développe pas les tableaux, doc0 votes
@Alexander Azarov, des idées pour résoudre ce problème ? J'ai entendu parler de personnes qui copient dans des champs dans lesquels $rename peut aller...
0 votes
Personnellement, j'écris des scripts qui parcourent la collection et font des migrations.
0 votes
Si vous cherchez à faire cela avec des commandes de base de données : Comment renommer un champ dans un tableau avec des commandes de base de données ?