如何更新mongodb上其他数组内的数组的值?

时间:2018-09-28 15:23:09

标签: node.js mongodb

我需要帮助,我正在尝试更新content数组内部的数组stage中的数据:

{
  "_id": ObjectId("5a95b1581ddd0d2c60b90612"),
  "country": "Chile",
  "name": "Xiaomi",
  "start": new Date("2018-02-28T00:00:00-0300"),
  "end": new Date("2018-03-03T00:00:00-0300"),
  "budget": 5000000,
  "instructions": "efaw",
  "status": null,
  "createdAt": new Date(1519568976029),
  "budgetAccum": 2465914.3070999998599,
  "brief": {
    "stage": [
      {
        "cantPost": 1,
        "cantStories": 1,
        "desc": "Descripción",
        "title": "Title of etapa",
        "_id": ObjectId("5bad2e6814bc8ae0450d79a1"),
        "content": [
          {
            "id": 1,
            "desc": "Descripción contenido",
            "hashtions": "#hashtag / @mentions",
            "media": "photo or video",
            "participants": [

            ],
            "type": "post or history",
            "title": "Title of contenido"
          }
        ]
      }
    ]
  }
}

我的查询是这样:

const updateContent = await this.update({
    "_id": ObjectId(campaignId),
    "brief.stage._id": ObjectId(data.id),
    "brief.stage.content.id": data.idContent
}, {
    "$set": {
        "brief.stage.content.$.desc": data.content.desc,
        "brief.stage.content.$.hashtions": data.content.hashtions,
        "brief.stage.content.$.media": data.content.media,
        "brief.stage.content.$.participants": data.content.participants,
        "brief.stage.content.$.type": data.content.type,
        "brief.stage.content.$.title": data.content.title,

    }
});

错误是这样的:

  

{       “数据”:{},       “ message”:“无法使用该部分(brief.stage.content.0.desc的阶段)遍历元素({stage:[{cantPost:1,cantStories:1,desc:\”Descripción\“,标题: \“ etapa的标题”,_id:ObjectId('5bad2e6814bc8ae0450d79a1'),内容:[{id:1,desc:\“Descripcióncontenido \”,注释:\“#hashtag / @mentions \”,媒体:\“照片或视频\“,参与者:[],键入:\”帖子或历史\“,标题:\” contenido的标题\“}]},{cantPost:1,cantStories:1,desc:\“Descripción\” ,标题:\“ etapa的标题”,_id:ObjectId('5bad3932206981e377a31971'),内容:[{hola:\“ true \”,adios:\“ false \”}]}]}))“,       “ name”:“广告系列引擎”,       “ type”:“ BAD_REQUEST”,       “状态代码”:400

任何解释以及如何解决?

谢谢

1 个答案:

答案 0 :(得分:1)

您可以在mongodb 3.6及更高版本中使用arrayFilters

db.getCollection('testcollections').update(
  { "_id" : ObjectId("5a95b1581ddd0d2c60b90612") },
  { "$set" : {
    "brief.stage.$[e1].content.$[e2].desc" : 1,
    "brief.stage.$[e1].content.$[e2].hashtions" : 2,
    "brief.stage.$[e1].content.$[e2].media" : 3,
    "brief.stage.$[e1].content.$[e2].participants" : 4,
    "brief.stage.$[e1].content.$[e2].type" : 5,
    "brief.stage.$[e1].content.$[e2].title" : 6
  }},
  { "arrayFilters": [
    { "e1._id": ObjectId("5bad2e6814bc8ae0450d79a1") },
    { "e2.id": 1 }
  ]}
)