如何更新mongoDb文档中的所有密钥
嗨,我有一个具有复杂结构的集合,这个结构中的文档在结构上是不同的。我想更新所有键如何更新mongoDb文档中的所有密钥,mongodb,Mongodb,嗨,我有一个具有复杂结构的集合,这个结构中的文档在结构上是不同的。我想更新所有键V,使其在此集合中具有值0。 例如: { "_id" : ObjectId("5805dfa519f972b200ea2955"), "s" : { "id" : NumberLong(36435) }, "a" : [ { "XX-(random value)" : { "V" : 4
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
}
}
}
}
}
]
}
您可以使用一个简短的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);
});
函数检查属性(doc){
for(文档中的var propertyName){
if(单据类型[propertyName]=“对象”){
检查属性(文档[propertyName]);
}否则{
如果(propertyName==“V”){
单据【属性名称】=0;
打印(文档[propertyName]);
}
}
}
}
db..find({}).forEach(函数(doc){
检查属性(doc);
db..保存(doc);
});
如果将此代码保存在.js文件中,则可以针对mongo数据库运行它:
> mongo --host <host> --port <port> <script_name>.js
>mongo--host--port.js
首先,我建议您更改文档结构,并将xx-*
在子文档中归档一个键值。也就是说,要回答您的问题,唯一的方法就是用当前的结构拍摄您文档的快照;迭代光标,然后使用批量操作更新每个文档。您能给我发送代码吗