【问题标题】:Update a field to be further nested in a document - MongoDB/Node更新一个字段以进一步嵌套在文档中 - MongoDB/Node
【发布时间】:2021-10-25 21:01:23
【问题描述】:

我正在使用 migrate-mongoNode driver for Mongo 编写迁移,它们的文档都不太好。我正在尝试获取一个字段并将其进一步嵌套一层。以下是原始结构的示例:

{
"_id": {"$oid":"xxxxxxxx"},
"module": "lalala",
"settings": {
  "yAxis": {
    "title": {
      "text": "TITLE"
    }
  }
}

我想获取 yAxis 字段及其内容并将其嵌套在“highcharts”字段下,因此最终结果如下:

"settings": {
  "highcharts": {
    "yAxis": {
      "title": {
        "text": "TITLE"
      }
    }
  }
}

我看到了这个Update field with value from a nested field,并希望我可以使用 $ 运算符来获取 yAxis 内容并将它们重新插入,但这不起作用。 (yAxis 字段现在只读取字符串文字 '$settings.yAxis')

async up(db) {
  const panels = db.collection('panels');
  await panels.updateMany({module: 'lalala'},
    {$set: {'settings.highcharts.yAxis': '$settings.yAxis'}});
  await panels.updateMany({module: 'lalala'},
    {$unset: {'settings.yAxis': ''}});

我还想也许我应该遍历文档,将它们解析为 JSON 并获取 yAxis 的内容,然后将其插入到新的“highcharts”字段中,但这是在 forEach 中使用 await,它不起作用。

理想情况下,我正在执行此异步操作,以便我可以在一次迁移中执行多个操作。否则,我将不得不在一次迁移中设置新的“highcharts”字段,并在另一次迁移中取消设置旧的“yAxis”,如果一个失败但另一个没有,这可能会导致问题。

有点卡在这里,任何帮助。谢谢!

【问题讨论】:

    标签: javascript node.js mongodb migrate-mongo


    【解决方案1】:

    好的,我很接近,但我不明白为什么,但是我需要在我的 $set 周围加上括号。

    await panels.updateMany({module: 'lalala'},
      [ {$set: {'settings.highcharts.yAxis': '$settings.yAxis'}} ] );
    

    【讨论】:

      猜你喜欢
      • 2020-06-29
      • 2018-12-08
      • 2022-01-02
      • 2016-08-04
      • 1970-01-01
      • 2012-02-20
      • 2017-10-20
      • 1970-01-01
      相关资源
      最近更新 更多