Javascript 嵌套数组中的Mongoose findOneAndUpdate
如果componentId和wfInstanceId匹配,我需要更新“fields”数组中的类型、键和值 这就是我需要这样做的文件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
{
"_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执行此操作吗?