如何在MongoDB中将数组转换为对象?
例如,我要转换此文档:
{
"_id" : NumberLong(279),
"userAddressList" : [
{
"street" : "Street",
"house" : "House",
"building" : "Building",
"flat" : NumberLong(0),
"entrance" : NumberLong(0),
"floor" : NumberLong(0),
"intercom" : "Intercome"
}
],
}
对此:
{
"_id" : NumberLong(279),
"userAddressList" :
{
"street" : "Street",
"house" : "House",
"building" : "Building",
"flat" : NumberLong(0),
"entrance" : NumberLong(0),
"floor" : NumberLong(0),
"intercom" : "Intercome"
},
}
所以我需要将
""userAddressList" : [{..}]"
转换为""userAddressList" : {..}"
。 最佳答案
对于MongoDB 4.2和更高版本的
您可以尝试以下查询,该查询在更新中使用聚合管道:
db.collection.updateMany(
{},
[
{ '$addFields': {
'userAddressList': {
'$arrayElemAt': ['$userAddressList', 0]
}
} }
]
)
对于较旧的MongoDB版本:
db.collection.find().forEach(function(doc){
userAddressList = doc.userAddressList[0];
doc.userAddressList = userAddressList;
db.collection.save(doc);
})
或使用运行以下管道的聚合框架
db.collection.aggregate([
{ "$addFields": {
"userAddressList": {
"$arrayElemAt": ["$userAddressList", 0]
}
} },
{ "$out": "collection" }
])
请注意,这不会更新您的集合,而是会替换现有的集合,并且不会更改上一个集合中存在的任何索引。如果聚合失败,
$out
操作将不对先前存在的集合进行任何更改。