实际上有2个文档:历史和子公司,但我忘记了将历史添加到子公司名称中。
历史文档:
{
"_id" : ObjectId("59480f91ba4d070b882ff924"),
"subsidiary" : ObjectId("5947fdf3ba4d070b882ff851"),
"campaignTitle" : "Prueba Autoredeeem",
"campaignId" : ObjectId("5948004fba4d070b882ff886"),
}
子公司文件
{
"_id" : ObjectId("5947fdf3ba4d070b882ff851"),
"loginId" : 50174,
"name" : "Sucursal Alpha",
}
现在,我需要更新历史文档,从子提供的文档
中添加一个"子公司名"字段,并带有"子公司"字段。这是我的第一个剥夺:
db.getCollection('couponredeemhistories')
.updateMany({}, {$set: {subsidiaryName:
db.getCollection('subsidiaries')
.findOne({"_id": ObjectId('5947fdf3ba4d070b882ff851')}, {_id: 0,name: 1})}})
但是,结果为我提供了一个子公司中的对象,而是平面文本。
{
"_id" : ObjectId("59480f91ba4d070b882ff924"),
"subsidiary" : ObjectId("5947fdf3ba4d070b882ff851"),
"campaignDescription" : "",
"campaignTitle" : "Prueba Autoredeeem",
"campaignId" : ObjectId("5948004fba4d070b882ff886"),
"subsidiaryName" : {
"name" : "Sucursal Alpha"
}
}
然后,我有2个问题:
如何仅将平面文本值设置为子公司字段?R:添加.NAME到项目获取平面文本 如何设置当前文档的.findone((" id"参数,而是objectid('硬代码'(?R:使用foreach光标
迭代
重要限制:这是针对MongoDB Shell(Mongodb 3.4(
谢谢,请支持我解决此问题的任何语言问题。
多亏了@ASTRO的更新答案:
db.getCollection('couponredeemhistories').find()
.forEach(function(doc){
if(doc.subsidiary !== undefined){
doc.subsidiaryName = db.getCollection('subsidiaries').findOne({'_id': doc.subsidiary}, {_id: 0, name: 1}).name;
db.getCollection('couponredeemhistories').save(doc);
}
})
尝试以下:
db.getCollection('couponredeemhistories')
.updateMany({}, {$set: {subsidiaryName:
db.getCollection('subsidiaries')
.findOne({"_id": ObjectId('5947fdf3ba4d070b882ff851')}, {_id: 0,name: 1}).name}})