MongoDB:如何重新排序过去混乱的文档字段
MongoDB: How to reorder document Fields that got jumbled in the past
我的数据库中有许多文档的字段顺序大多是随机的,如 Mongo Compass 中所示。第一个字段始终是 _id,但其余字段可以按任何顺序排列。这使得用眼睛扫描记录非常困难。
我已经读到 Mongo 4.2 不再发生由于更新插入而导致的重新排序并且我已经升级 - 但问题仍然存在。
有没有办法让我重新排序我的字段,以便集合中的每个文档都具有相同的字段顺序 - 先说 -id 然后再说 a-z?
您可以尝试使用保留散列键顺序的语言阅读每个文档,按您认为合适的方式重新排序字段,然后写回每个文档。
由于 bson 将映射实现为有序键值对的列表,我希望所有常规工具都能保留每个单独文档当前存在的键的顺序。
您可以使用 $replaceWith 来执行此操作。
https://mongoplayground.net/p/VBzpabZuJpy
db.YOURCOLLECTION.updateMany({}, [
{$replaceWith: {
$mergeObjects: [
{
"fieldA": "$fieldA",
"fieldB": "$fieldB",
"fieldC": "$fieldC",
"fieldD": "$fieldD",
"fieldE": "$fieldE"
},
"$$ROOT"
]
}}
])
我的数据库中有许多文档的字段顺序大多是随机的,如 Mongo Compass 中所示。第一个字段始终是 _id,但其余字段可以按任何顺序排列。这使得用眼睛扫描记录非常困难。 我已经读到 Mongo 4.2 不再发生由于更新插入而导致的重新排序并且我已经升级 - 但问题仍然存在。 有没有办法让我重新排序我的字段,以便集合中的每个文档都具有相同的字段顺序 - 先说 -id 然后再说 a-z?
您可以尝试使用保留散列键顺序的语言阅读每个文档,按您认为合适的方式重新排序字段,然后写回每个文档。
由于 bson 将映射实现为有序键值对的列表,我希望所有常规工具都能保留每个单独文档当前存在的键的顺序。
您可以使用 $replaceWith 来执行此操作。 https://mongoplayground.net/p/VBzpabZuJpy
db.YOURCOLLECTION.updateMany({}, [
{$replaceWith: {
$mergeObjects: [
{
"fieldA": "$fieldA",
"fieldB": "$fieldB",
"fieldC": "$fieldC",
"fieldD": "$fieldD",
"fieldE": "$fieldE"
},
"$$ROOT"
]
}}
])