Javascript mongodb updateshell命令应该是什么
这是我收藏的一份文件Javascript mongodb updateshell命令应该是什么,javascript,mongodb,mongodb-query,Javascript,Mongodb,Mongodb Query,这是我收藏的一份文件 { "_id": ObjectId("55e86e98f493590878bb45d7"), "KIDS_M_0_2" : "", "KIDS_F_0_2" : "", "KIDS_U_0_2" : "Y", "KIDS_M_3_5" : "", "KIDS_F_3_5" : "", "KIDS_U_3_5" : "Y", "KIDS_M_6_10" : "", "KIDS_F_6_10" : "
{
"_id": ObjectId("55e86e98f493590878bb45d7"),
"KIDS_M_0_2" : "",
"KIDS_F_0_2" : "",
"KIDS_U_0_2" : "Y",
"KIDS_M_3_5" : "",
"KIDS_F_3_5" : "",
"KIDS_U_3_5" : "Y",
"KIDS_M_6_10" : "",
"KIDS_F_6_10" : "",
"KIDS_U_6_10" : "",
"KIDS_M_11_15" : "",
"KIDS_F_11_15" : "",
"KIDS_U_11_15" : "",
"KIDS_M_16_17" : "",
"KIDS_F_16_17" : "",
"KIDS_U_16_17" : "Y"
}
我希望这样
{
"_id":ObjectId("55e86e98f493590878bb45d7"),
"KIDS": { "KIDS_M_0_2" : "",
"KIDS_F_0_2" : "",
"KIDS_U_0_2" : "Y",
"KIDS_M_3_5" : "",
"KIDS_F_3_5" : "",
"KIDS_U_3_5" : "Y",
"KIDS_M_6_10" : "",
"KIDS_F_6_10" : "",
"KIDS_U_6_10" : "",
"KIDS_M_11_15" : "",
"KIDS_F_11_15" : "",
"KIDS_U_11_15" : "",
"KIDS_M_16_17" : "",
"KIDS_F_16_17" : "",
"KIDS_U_16_17" : "Y"
}
这可以通过shell完成吗?我的更新命令应该是什么 实际上,您需要的不仅仅是简单的命令 您需要循环使用该方法返回的游标,然后使用字段的名称及其值创建一个新对象“kids”。下一步要做的是所有字段,并使用操作符创建新字段。当然,要做到这一点,您需要使用1个操作以获得最高效率
var bulk=db.collection.initializeUnderedBulkop();
var计数=0;
db.collection.find().forEach(函数(doc){
var={};
用于(输入文档){
if(key!='\u id'&&Object.prototype.hasOwnProperty.call(doc,key)){
儿童[钥匙]=医生[钥匙];
var unset={};
取消设置[键]='';
bulk.find({'u-id':doc.u-id}).updateOne({'unset':unset});
计数++;
}
bulk.find({''u-id':doc.u-id}).updateOne({'$set':{'KIDS':KIDS});
如果(计数%500==0){
bulk.execute();
bulk=db.collection.initializeUnderedBulkop();
}
})
如果(计数>0)
bulk.execute()
执行此操作后,您的文档如下所示:
{
“_id”:ObjectId(“567d99bcbc08a0817a1b06dd”),
“孩子”:{
“KIDS_M_0_2”:“,
“儿童2”:“,
“孩子们”\U\U 0\U 2:“Y”,
“儿童3岁5岁”:“,
“儿童”3“5”:“,
“儿童3岁5岁”:“Y”,
“儿童6岁10岁”:“,
“儿童”6“10”:“,
“儿童6岁10岁”:“,
“KIDS_M_11_15”:“,
“儿童11岁以下”:“,
“儿童”11“15”:“儿童”,
“KIDS_M_16_17”:“,
“儿童16岁17岁”:“,
“儿童16岁17岁”:“Y”
}
}
MongoDB 3.2
Bulk()
var操作=[];
db.collection.find().forEach(函数(doc){
var={};
对于(文档中的var键){
如果(!key.startsWith(''u id')&&Object.prototype.hasOwnProperty.call(doc,key)){
儿童[钥匙]=医生[钥匙];
var unset={};
取消设置[键]='';
操作.推送(
{'updateOne':
{
'filter':{'u id':doc.\u id},
'update':{'$unset':unset}
}
}
);
}
操作.推送(
{'updateOne':
{
'filter':{'u id':doc.\u id},
'update':{'$set':{'KIDS':KIDS}
}
}
);
}
push({'ordered':true});
})
db.collection.bulkWrite(操作)
<P>1。API在版本2.6中是新的。因此,如果您在旧版本上,则应该考虑升级。