繁体   English   中英

更新字段以进一步嵌套在文档中 - MongoDB/Node

[英]Update a field to be further nested in a document - MongoDB/Node

我正在使用migrate-mongoMongo 的 Node 驱动程序编写迁移,它们都没有那么好的文档。 我正在尝试获取一个字段并将其进一步嵌套。 这是原始结构的示例:

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

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

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

我看到这个Update 字段具有来自嵌套字段的值,并希望我可以使用 $ 运算符来获取 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”,如果一个失败而另一个失败,这可能会导致问题。

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

好吧,我已经很接近了,但我不明白为什么,但是我需要用括号括起我的 $set 。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM