Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 嵌套数组中的Mongoose findOneAndUpdate_Javascript_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript 嵌套数组中的Mongoose findOneAndUpdate

Javascript 嵌套数组中的Mongoose findOneAndUpdate,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,如果componentId和wfInstanceId匹配,我需要更新“fields”数组中的类型、键和值 这就是我需要这样做的文件 { "_id": { "$oid": "586b6d756937c22f207dd5af" }, "wfInstanceId": "0111", "workflowId": "ash3", "folderURL": "ash3", "teamName": "teamName", "dataStr

如果componentId和wfInstanceId匹配,我需要更新“fields”数组中的类型、键和值

这就是我需要这样做的文件

{
    "_id": {
        "$oid": "586b6d756937c22f207dd5af"
    },
    "wfInstanceId": "0111",
    "workflowId": "ash3",
    "folderURL": "ash3",
    "teamName": "teamName",
    "dataStream": [
        {
            "componentInstanceId": "componentInstanceId1",
            "componentId": "componentId1",
            "_id": {
                "$oid": "586b6d756937c22f207dd5b0"
            },
            "fields": [
                {
                    "type": "String",
                    "value": "value1",
                    "key": "key",
                    "_id": {
                        "$oid": "586b6d756937c22f207dd5b1"
                    }
                },
                {
                    "type": "String",
                    "value": "value2",
                    "key": "key1",
                    "_id": {
                        "$oid": "586b6d756937c22f207dd5b1"
                    }
                }
            ]
        },
        {
            "componentInstanceId": "componentInstanceId2",
            "componentId": "componentId22",
            "_id": {
                "$oid": "586b6d756937c22f207dd5b0"
            },
            "fields": [
                {
                    "type": "String",
                    "value": "value1",
                    "key": "key",
                    "_id": {
                        "$oid": "586b6d756937c22f207dd5b1"
                    }
                },
                {
                    "type": "String",
                    "value": "value2",
                    "key": "key2",
                    "_id": {
                        "$oid": "586b6d756937c22f207dd5b1"
                    }
                }
            ]
        }
    ],
    "id": "38f356f0-d196-11e6-b0b9-3956ed7f36f0",
    "__v": 0
}
我试过这样做,我也试过$set超过$push,这也不起作用

Model.findOneAndUpdate( {'wfInstanceId': '0111', 'dataStream.componentId': 'componentId1'}, {$push : { 'dataStream.fields.$.key' : 'sdsdds' }}, { upsert: true }, function (err, data) {
                if (err) {
                    reject(err);
                    console.log('error occured' + err);
                }
                console.info("succesfully saved");
                resolve (data);
            });

正如他们在本文中所描述的,它应该适用于更新方法,而更新方法对我来说也不适用。如果您能帮助我解决这个问题,我们将不胜感激。

当您使用$操作符时,它只会更新每个文档中第一个匹配的数组元素

到目前为止,在mongoose中不可能直接更新所有数组元素

您可以在您的情况下执行此操作:

db.collection.find({'wfInstanceId': '0111', 'dataStream.componentId': 'componentId1'})
  .forEach(function (doc) {
    doc.datastream.forEach(function (datastream) {
      if (dataStream.componentId === componentId1) {
        dataStream.fields.forEach(function(fields){
         // you can also write condition for matching condition in field
           dataStream.fields.key="";
           dataStream.fields.value="";
           dataStream.fields.type="";
         }
      }
    });
    db.collection.save(doc);
  }); 

这是普通的javascript代码。我认为对mongo新手来说更清楚。

上面说Model.save不是mongoose中的一个函数,请执行此doc.save();保存方法在文档中,有人知道如何使用$push或$set执行此操作吗?