我想在文档中的文档中的所有数组中的所有文档中设置一个字段。 基本上,我想这样做
{$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.
}
]
},
}
它应该将这个字段添加到这些嵌套文档中,如果有更多文档和更多数组,它必须是可扩展的。
我没有设计架构。
这是怎么做到的?我不确定它是否可能。
答案 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。
希望它有所帮助!!