【问题标题】:iterate over large mongodb collection for purpose of updating schema迭代大型 mongodb 集合以更新模式
【发布时间】:2021-09-15 11:07:18
【问题描述】:

我有 300k 的测试文档集合。我想将所有人 firstNamelastName 更新为小写。

  const person = new Schema({
  firstName: { type: String},
  lastName: { type: String }

})

我已将lowecase:true 添加到架构中,但如何更新现有文档?

我试过了:

  CaseFile
  .find({ })
  .cursor()
  .eachAsync(async function (doc) {
    await doc.save()
  })

但我得到了错误

Error: Collection method find is synchronous

我也试过了:

   CaseFile
  .find({ })
  .then(docs => {
    docs.forEach(doc => {
      doc.save()
    })
  })

给出错误:

JavaScript heap out of memory

数据库版本 v5.0.2

“猫鼬”:“^6.0.5”,

感谢 Wernfried Domscheit 的管道 ????解决方案:

CaseFile.updateMany({}, [
  {
    $set:
    {
      firstName: { $toLower: '$firstName' },
      lastName: { $toLower: '$lastName' }
    }
  }]
)
  .then(res => res)

【问题讨论】:

    标签: mongodb mongoose mongoose-schema


    【解决方案1】:

    到底为什么要“迭代”,即逐行?

    使用聚合管道:

    db.CaseFile.updateMany({}, [
       { $set: 
          firstName: { $toLower: "$firstName" },
          lastName: { $toLower: "$lastName" }
       }
    ])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-23
      • 1970-01-01
      • 2012-06-18
      • 2016-08-13
      • 1970-01-01
      • 2016-11-19
      • 2018-09-09
      相关资源
      最近更新 更多