这是尝试通过其值
更新代码匹配的函数 Element
res collection
将code of Marque
与doc.Marque
进行比较,如果是value of the marque
则将其替换为mongoDB CLI
。
此代码在GO
中完美运行,但正如我正在使用mgo
。
我尝试将其转换为mgo
,如下所示,但它不起作用,我在db.res.find().forEach(function(doc){
var v = db.brands.findOne({code: doc.Marque});
if(v){
db.res.update({"Marque": doc.Marque},
{$set: {"Marque":v.value}}, {multi: true});
}
});
中找不到foreach函数,在这种情况下是否有东西需要替换?谢谢你的帮助
result:=Results{}
pipe:=res.find(bson.M{}).Iter()
for pipe.Next(&result) {
brands:=brands.findOne({code: doc.Marque});
if(v){
pipe.update({"Marque": doc.Marque},
{$set: {"Marque": v.value}}, {multi: true});
}
}
这是我试过的:
{{1}}
答案 0 :(得分:2)
访问mgo Godoc可能会帮助您了解其工作原理。
其次,Golang中的导出类型/函数以大写字母开头。因此,res.find
,brands.findOne
,...应分别为res.Find
,brands.FineOne
,如果存在此类函数。
// let's say you have a type like this
type myResult struct {
ID bson.ObjectId `bson:"_id"`
Marque string `bson:"Marque"`
// other fields...
}
// and another type like this
type myCode struct {
Code string `bson:"code"`
// other fields...
}
res := db.C("res")
brands := db.C("brands")
result := myResult{}
// iterate all documents
iter := res.Find(nil).Iter()
for iter.Next(&result) {
var v myCode
err := brands.Find(bson.M{"code": result.Marque}).One(&v)
if err != nil {
// maybe not found or other reason,
// it is recommend to have additional check
continue
}
query := bson.M{"_id": result.ID}
update := bson.M{"Marque": v.value}
if err = res.Update(query, update); err != nil {
// handle error
}
}
if err := iter.Close(); err != nil {
fmt.Println(err)
}