我有一个名为flowGraph的mongo集合,其中有一个文档结构如下:
{
"_id": "565fafa4e4b02f4f9aa8feb4",
"workSetup": false,
"name": "somthing_name",
"default": true,
"active": true,
"last_update": 1449111461492,
"items": [{
"characters": "ABC",
"steps": [{
"stepData": [{
"stepName": "Step1",
"index": 1,
"stepDetails": [{
"flowText": "Activity for step 1",
"flowStatus": true
}],
"notes": ""
}, {
"stepName": "Step2",
"index": 2,
"stepDetails": [{
"flowText": "Activity for step 2",
"flowStatus": true
}]
}]
}, {
"stepData": [{
"stepName": "Function1",
"index": 1,
"stepDetails": [{
"flowText": "Default flow",
"flowStatus": true
}]
}, {
"stepName": "Function2",
"index": 2,
"stepDetails": [{
"flowText": "Activity for Function2",
"flowStatus": true
}]
}]
}, {
"characters": "DEF",
"steps": [{
"stepData": [{
"stepName": "Procedure1",
"index": 1,
"stepDetails": [{
"flowText": "Default flow",
"flowStatus": true
}]
}, {
"stepName": "Procedure2",
"index": 2,
"stepDetails": [{
"flowText": "Default flow",
"flowStatus": true
}]
}]
}, {
"stepData": [{
"stepName": "Job1",
"index": 1,
"stepDetails": [{
"flowText": "Activity for Job1",
"flowStatus": true
}]
}, {
"stepName": "Job2",
"index": 2,
"stepDetails": [{
"flowText": "Default flow",
"flowStatus": true
}]
}]
}]
}]
}]
}
在上面的json中,我需要更新匹配
的所有字段"flowText": "Default flow"
要:
"flowText": "Active flow"
由于我使用java应用程序(使用mongo java驱动程序)来访问它,我需要在一个更新查询中得到它,因为我无法创建一个js文件来执行它。 如果我执行以下查询,我将获取数据。
db.flowGraph.find({"items.0.steps.0.stepData.1.stepDetails.0.flowText":"Default flow"});
我想以通用方式使用它,所以我不必直接给出索引。 如果我更新如下,它不起作用: 错误:在路径中找到太多位置(即' $')元素 db.flowGraph.update({" items。$。steps。$。stepData。$。stepDetails。$。flowText":"默认流"},{$ set:{&# 34; item。$。steps。$。stepData。$。stepDetails。$。flowText":" Active flow"}});
问题:
如何在第一时间找到此文档而不提供items.0.steps.0.stepData.1.stepDetails.0.flowText 中的索引。即使我找到了这个,我也必须迭代循环并等于flowText,更改它并将其保存回DB
如何以更简单的方式更改flowText,无需创建js文件或在java中进行多个循环。
除了使用db.flowGraph.update之外还有其他方法吗?
注意:我无法更改集合的数据结构,因为"步骤"中有许多其他属性。和" stepData"我删除了那些以简化问题。
提前感谢您的帮助!