需求:mongodb里面有一个集合A,我现在需要往集合A里面新增几个字段,这几个字段需要从集合B,和集合C里面通过外键关联查询出来后赋值到集合A里面。
javascript代码:
var dataList = db.custCardMo_cf.find({});
dataList.forEach(function(acr){
var agentId =null;
var registerTime =null;
var custPhoneNumber =null;
var agentPhoneNumber =null;
var agentName =null;
if(acr.custId!=null){
var num=acr.custId.length;
var custObj =null;
if(num>24){
custObj=db.custMo.findOne({"_id":acr.custId});
}else{
custObj=db.custMo.findOne({"_id":ObjectId(acr.custId)});
}
if(custObj !=null){
custPhoneNumber=custObj.phoneNumber;
registerTime=custObj.createTime;
agentId=custObj.agentId;
agentName=custObj.agentName;
}
if(agentId!=null){
var num2= agentId.length;
var agentObj =null;
if(num2 >24){
agentObj= db.agentMo.findOne({"_id":agentId});
}else{
agentObj= db.agentMo.findOne({"_id":ObjectId(agentId)});
}
if(agentObj!=null){
agentPhoneNumber = agentObj.phoneNumber;
}
}
printjson(acr.custId);
db.custCardMo_cf.update({ "_id": acr._id }, {"$set": { agentId:agentId,
registerTime:registerTime,
custPhoneNumber:custPhoneNumber,
agentPhoneNumber:agentPhoneNumber,
agentName:agentName
}});
}
}
);
上面的shell脚本简单解释一下,因为A集合的custId 数据不规范,有的custId是24位的,有的32位的,所以根据id的长度不同,查询方式不同。