如何更新MongoDB文档中的所有键

3

你好,我有一个结构复杂的集合,其中的文档在结构上是不同的。我想要在这个集合中更新所有键为V的值为0。 例如:

   {
    "_id" : ObjectId("5805dfa519f972b200ea2955"),
    "s" : {
        "id" : NumberLong(36435)
    },
    "a" : [ 
        {
            "XX-(random value)" : {
                "V" : 4
            },
            "V" : 4,
            "u" : {
                "YY-(random value)" : {
                    "V" : 4,
                    "ZZ-(random value)" : {
                        "V" : 4,
                        "WW-(random value)" : {
                            "V" : 4
                        }
                    }
                }
            }
        }
    ]
}

1
首先,我建议您更改文档结构,并将 xx-* 字段作为子文档中的键值。话虽如此,回答您的问题,目前唯一的方法是对文档进行快照;迭代游标,然后使用批量操作更新每个文档。 - styvane
你能否请发送给我代码? - user1796624
1个回答

0
你可以使用简短的 JavaScript 来实现这个功能。需要遍历每个文档的每个属性,检查属性名称。如果匹配名称为“V”,则将其更新为值 0。可以使用循环递归地完成此操作。以下 JavaScript 代码应该能够满足需求:
function checkProperties(doc) {
    for (var propertyName in doc) {
        if (typeof doc[propertyName] == "object") {
            checkProperties(doc[propertyName]);
        } else {
            if (propertyName == "V") {
                doc[propertyName] = 0;
                print(doc[propertyName]);
            }
        }
    }
}

db.<your_collection_name>.find({}).forEach(function(doc) {
    checkProperties(doc);
    db.<your_collection_name>.save(doc);
});

如果您将此代码保存在 .js 文件中,然后可以针对您的 MongoDB 数据库运行它:
> mongo --host <host> --port <port> <script_name>.js

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接