MongoDB 外壳 : How to convert array fields into string

标签 mongodb

我有一个将值存储为数组的集合,但这些值必须是字符串。

在 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/

相关文章:

python - 无法连接到远程计算机上运行的 mongodb

node.js - Passport JS 本地策略不适用于 MongoDB

java - MongoDB 太多打开的连接

mongodb - meteor MongoDB数据库在哪里?

mysql - Slamdata:如何根据日期查找累计和

javascript - MongoDB Node.js 通过 _id 的 deleteOne 不适用于 ObjectId

mongodb - 当我尝试对文档数组执行 db.collection.save 操作时,Mongo 抛出 E11000 重复键错误

mongodb - 如何将 Mongoose 聚合结果转换为特定的文档模式类型?

xml - 将 XML 数据存储在 mongodb 集合中

sql - 对于有竞争力的在线门票销售,您会建议什么数据库解决方案