我有一个将值存储为数组的集合,但这些值必须是字符串。
在 4000 个数据集中,有 800 个看起来像这样
{'_id': '5c4f8408fc69ca02c92ac822',
'enabled': true,
'order_date': '2019-01-29T10:36:56.906Z',
'order_id': 'PO-ERSNJ9',
'productId': ['5dd5ca0170ebec13b8ab1134'],
'selling_date': null,
'selling_price': 99.99,
'split_invoice': null}
对于这800我需要转换
“productId”:[“5dd5ca0170ebec13b8ab1134”]
进入
“productId”:“5dd5ca0170ebec13b8ab1134”
通过 mongo shell。
我已经想到,reduce
(聚合)是可行的方法,
但我无法获得正确的语法。
帮助会很大。非常感谢
最佳答案
此 shell 查询使用“orderId”数组字段的字符串值更新集合。
db.orders.aggregate( [
{
$match: { productId: { $type: "array" } }
},
{
$addFields: { productId: { $arrayElemAt: [ "$productId", 0 ] } }
}
]
).forEach( doc => db.orders.updateOne( { _id: doc._id }, { $set: { productId: doc.productId } } ) );
此更新将用于将数组值转换为字符串 - 这仅适用于 MongoDB 4.2 或更高版本。请注意,更新在
update
方法中使用了一个聚合管道。
db.orders.updateMany(
{
productId: { $type: "array" }
},
[
{
$set: { productId: { $arrayElemAt: [ "$productId", 0 ] } }
},
]
)
关于MongoDB 外壳 : How to convert array fields into string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59022372/