如何在 MongoDB 中的另一个嵌套数组中更新嵌套数组中的对象

维克托

在 mongo DB 中,我有一个处理包含设备(“dispositivos”)和这些设备包含传感器(“sensores”)的建筑物(“centros”)的集合。我正在尝试更新其中一个传感器。建筑物由它们的“_id”标识,设备由它们的“uid”标识,传感器由它们的“变量名称”(“变量”)标识。我已经尝试遵循 StackOverflow 上的一些示例,但没有成功。

这是我的近似值:

db.collection.update({
  "uid": "e898b585-d855-4017-9fe4-0644360f9d1b"
},
{
  "$set": {
    "dispositivos.$[dispositivo].sensores.$[sensor]": {
      "variable": "Plutonio",
      "unidad": "yuyuyuyuuyu"
    }
  }
},
{
  "multi": false,
  "upsert": false,
  arrayFilters: [
    {
      "dispositivo.uid": "e898b585-d855-4017-9fe4-064386kkkkkk",
      "sensor.variable": "intensidad"
    }
  ]
})

但它给了我以下错误:

fail to run update: multiple write errors: [{write errors: [{Error parsing array filter :: caused by :: Expected a single top-level field name, found 'sensor' and 'dispositivo'}]}, {<nil>}]

你有一个现场样本:https : //mongoplayground.net/p/KrWw2WxkSch

这是我的收藏样本:

[
  {
    "uid": "e898b585-d855-4017-9fe4-0644360f9d1b",
    "nombre": "Colegio Rio Piles",
    "tipo": "Colegio",
    "direccion": {
      "calle": "Paseo Dr. Fleming, 1109",
      "codigoPostal": "33204",
      "municipio": "Gijon",
      "provincia": "Asturias",
      "ubicacion": {
        "latitud": "43.5351406",
        "longitud": "-5.6345379"
      }
    },
    "horario": {
      "apertura": "09:00",
      "cierre": "22:00"
    },
    "dispositivos": [
      {
        "uid": "e898b585-d855-4017-9fe4-064386055555",
        "descripcion": "",
        "tipo": "ANALIZADOR_RED",
        "adquisicion": "30s",
        "sensores": [
          {
            "variable": "voltaje",
            "unidad": "V"
          },
          {
            "variable": "intensidad",
            "unidad": "A"
          }
        ]
      },
      {
        "uid": "e898b585-d855-4017-9fe4-064386kkkkkk",
        "descripcion": "",
        "tipo": "CONTADOR_AGUA",
        "adquisicion": "30s",
        "sensores": [
          {
            "variable": "caudal",
            "unidad": "l/s"
          }
        ]
      }
    ]
  }
]

感谢乔的帮助。那就是解决方案:

db.collection.update({
  "uid": "e898b585-d855-4017-9fe4-0644360f9d1b"
},
{
  "$set": {
    "dispositivos.$[dispositivo].sensores.$[sensor]": {
      "variable": "Plutonio",
      "unidad": "yuyuyuyuuyu"
    }
  }
},
{
  "multi": false,
  "upsert": false,
  arrayFilters: [
    {
      "dispositivo.uid": "e898b585-d855-4017-9fe4-064386055555"
    },
    {
      "sensor.variable": "intensidad"
    }
  ]
})

每个数组过滤器都应该是数组中它自己的对象,例如

 arrayFilters: [
    {
      "dispositivo.uid": "e898b585-d855-4017-9fe4-064386kkkkkk"
    },
    {
      "sensor.variable": "intensidad"
    }
  ]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

更新数组mongodb中的嵌套数组

如何在mongodb中查询对象的嵌套数组?

如何在MongoDB中的嵌套数组中添加新键值或更改键值?

如何在MongoDB中更新多层嵌套数组?

如何在mongoDB或Mongoose中更新嵌套数组的值

如何在MongoDB中的$ group内创建嵌套数组?

MongoDB:如何在嵌套数组中设置字段值

如何使用MongoDB C#将新对象插入(推入)嵌套数组中?

如何在MongoDB中更新嵌套数组中的数据

MongoDB:如何从嵌套数组中的文档中删除对象

如何限制在mongodb中返回的嵌套数组字段

MongoDB-如何验证同一文档的另一个嵌套数组项中是否包含嵌套数组项?

如何更新 mongodb 嵌套数组中的值?

如何使用mongodb聚合转换嵌套数组中的文档

MongoDB - 如何从嵌套数组中的元素中删除字段?

MongoDB:如何更新嵌套数组

如何检查一个 json 对象数组中的 id 是否存在于另一个 json 对象嵌套数组中?

mongodb:如何更新单个文档的嵌套数组项中的多个字段

按 ID 在嵌套数组中查找单个记录并根据 MongoDB 中的另一个嵌套数组进行排序

如何从 MongoDB 嵌套数组中获取对象

如何从嵌套数组 mongodb 中获取单个匹配的文档?

如何根据另一个值在嵌套数组中查找值?

如何在mongodb中检索嵌套数组的单个元素?

MongoDB:如何在嵌套数组中插入对象?

如何更新嵌套数组mongodb中的值?

如何在mongodb的对象中更新我的另一个嵌套数组的嵌套数组

如何在 MongoDB 中对嵌套数组进行排序?

如何更新 MongoDB 文档中的特定嵌套数组

MongoDB - 如何在嵌套数组中查找和更新元素