MongoDB:在具有嵌套文档的文档中进行设置,嵌套文档具有嵌套文档

时间:2014-07-25 14:44:50

标签: mongodb

我想在文档中的文档中的所有数组中的所有文档中设置一个字段。 基本上,我想这样做

{$set : {'documentname.*anyandallstrings*.*anyandallnum*.fieldname' : value}}

文档架构的示例在这里

{
"_id" : "abc123",
"documenttoset" : {
    "arrayname" : [ 
        {
            "fieldname" : "fieldvalue"
            //i want to add fields here,
        }, 
        {
            "fieldname2" : "fieldvalue2",
            "fieldname3" : "fieldvalue3"
            //here,
        }
    ],
    "arrayname2" : [ 
        {
            "fieldname4" : "fieldvalue4",
            "fieldname5" : "fieldvalue5",
            "fieldname6" : "fieldvalue6",
            //and here. 

        }
    ]
},
}

它应该将这个字段添加到这些嵌套文档中,如果有更多文档和更多数组,它必须是可扩展的。

我没有设计架构。

这是怎么做到的?我不确定它是否可能。

1 个答案:

答案 0 :(得分:1)

实现此目的的唯一方法是遍历文档并单独更新每个字段。

import pymongo

c = pymongo.mongo_client.MongoClient(host='localhost')

db = c.local

cursor = db.test.find()

for q in cursor:
    dic = q
    for f in dic:
        field = dic[f]
        if(f != '_id'):
            for a in field:
                array = field[a]

                for d in array:
                    d['newfield'] = 'value'

完成后,您只需查找相关文档并进行更新即可。

db.test.update({'_id':'abc123'}, dic)

您必须使用驱动程序(显然)。我喜欢使用python和pymongo,但那里有很多司机。

如果这是一个db admin作业,我建议在python shell中使用pymongo。

希望它有所帮助!!