mongodb:更新嵌套数组

时间:2016-03-23 09:37:06

标签: java arrays mongodb mongodb-query

我有一个名为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"}});

问题:

  1. 如何在第一时间找到此文档而不提供items.0.steps.0.stepData.1.stepDetails.0.flowText 中的索引。即使我找到了这个,我也必须迭代循环并等于flowText,更改它并将其保存回DB

  2. 如何以更简单的方式更改flowText,无需创建js文件或在java中进行多个循环。

  3. 除了使用db.flowGraph.update之外还有其他方法吗?

  4. 注意:我无法更改集合的数据结构,因为"步骤"中有许多其他属性。和" stepData"我删除了那些以简化问题。

    提前感谢您的帮助!

0 个答案:

没有答案