Skip to main content
 首页 » 编程设计

mongodb之如何在mgo框架中使用mongodb 3.6的数组过滤器

2024年02月23日17jirigala

嗨,我遇到了一种情况,我必须使用 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"}, 
    }, 
)