嗨,我遇到了一种情况,我必须使用 Go 的 mgo 框架更新 mongodb 集合中嵌套数组中的对象。截至目前,mongodb 3.6 版本支持使用 ArrayFilters 作为 Collection.Update() 中的第三个参数。mgo Collection.Update() 函数仅支持 2 个参数,一个用于查找,另一个用于更新。我如何在 mgo 的 Collection.Update() 中使用 arrayfilters
这是我的对象看起来像
{
"TPID": "",
"TPName":"",
"TCID":"",
"TCName":"",
"BatchId":"",
"BatchName":"",
"QP":[{
"qpCode":"",
"jobRole":"",
"Sector":"",
"SectorID":"",
"CompulsoryNos":[{
"NosCode":"",
"TotalMarks":"",
"OutOf":"",
"Theory":"",
"SkillsPracticals":"",
"PerformanceCriteria":[{
"CriteriaDesc":"",
"OutOf":"",
"Theory":"",
"Skills":""
}]
}]
}]
}
这是我在 mongo shell(版本 3.6)中的方法
db.test4.update({},
{"$set" :
{"QP.$[i].CompulsoryNos.$[j].PerformanceCriteria.$[k].Skills" :
"Talented"}},
{"arrayFilters" : [{"i.qpCode" : "ID_1"},{"j.NosCode" : "Code_1"},
{"k.Skills" : "skills_1"}]})
有没有办法使用 mgo 实现相同的查询?
请您参考如下方法:
https://github.com/laoluan/mgo
我修改了mgo版本
_ = session.DB("youdbname").C("test4").UpdateUseAf(
bson.M{},
bson.M{"$set": bson.M{"QP.$[i].CompulsoryNos.$[j].PerformanceCriteria.$[k].Skills": "Talented"}},
[]bson.M{
{"i.qpCode" : "ID_1"},
{"j.NosCode" : "Code_1"},
{"k.Skills" : "skills_1"},
},
)