0

我有以下问题,我想用路径 id.metadata.panels.items 更新一个文档,其中 panel 是一个数组,items 是一个数组。我的搜索查询查看项目并仅显示符合 metadata.panels.items.member.type: 'owner' 条件的项目 - 然后我想将 'owner' 更新为 'account'。

当我尝试更新与更新路径相同的搜索路径时,我收到一条错误消息:无法使用部分 metadata.panels.items.member.type 来遍历元素。

文件有自己的

我该如何解决这个问题?

我已经尝试使用嵌套的 forEach 语句遍历集合以遍历每个数组,但我不确定下一步该做什么。

var records = db.getCollection('sample').find({"metadata.panels.items.member.type":"
[owner]"})
records.forEach(function(id) {
  var newFields = [];

  metadata.panels.forEach(function(panel, panelIndex){
    panels.items.forEach(function (item, itemIndex) {

      })
  })
})

示例文档结构:

{
    "panels": [{
    "name": "categories",
    "items": [{
      "member": {
        "type": "[Owner]",
        "subtype": "[Contractor]"
      },
      "format": {
        "members": {}
      }
    }]
  },
  {
    "name": "localisation",
    "items": [{
      "member": {
        "city": "NY",
        "state":"NY"
      }
    }]
  }]
}

预期结果:

{
    "panels": [{
    "name": "categories",
    "items": [{
      "member": {
        "type": "[Account]",
        "subtype": "[Contractor]"
      },
      "format": {
        "members": {}
      }
    }]
  },
  {
    "name": "localisation",
    "items": [{
      "member": {
        "city": "NY",
          "state":"NY"

      }
    }]
  }]
}
4

1 回答 1

0

我想到了。

var newFields = [];

var records = db.getCollection('sample').find({"metadata.panels.items.member.type":"
[owner]"})
records.forEach(function(id) {

metadata.panels.forEach(function(panel, panelIndex){
panels.items.forEach(function (item, itemIndex) {
    // I have generated update statements as strings
    // first list is always position 0 and this goes to the statement 
    // second list get's populated from itemIndex
    // added them to the newFields list
  })
}) 
})
 newFields.forEach(function(i){
  eval(i)
})
于 2019-07-22T19:05:23.853 回答