大佬教程收集整理的这篇文章主要介绍了Golang mongodb mgo driver Upsert / UpsertId文档,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
如果参数仅包含更新运算符表达式,则参数和参数的字段和值.此更新根据参数中的等于子句创建基本文档,然后应用参数中的更新表达式.
Upsert查找与提供的选择器文档匹配的单个文档,并根据更新文档对其进行修改.如果找不到与选择器匹配的文档,则将更新文档应用于选择器文档,并将结果插入到集合中.
但如果我像这样做一个upsert:
session.UpsertId(data.Code,data)
我最终得到一个条目,它具有由mongodb自动生成的ObjectID,而不是data.Code.
这意味着UpsertId期望使用更新运算符格式化数据,并且您不能使用任意结构?或者我在这里失踪了什么?
钯. Mongo 2.4.9 mgo v2 golang go version devel f613443bb13a
编辑:
这是我的意思的样本,使用Neil Lunn的示例代码:
package main import ( "fmt" "gopkg.in/mgo.v2" // "gopkg.in/mgo.v2/bson" ) type Person struct { Code string Name string } func main() { session,err := mgo.Dial("admin:admin@localhost"); if err != nil { fmt.Println("Error: ",err) return // panic(err) } defer session.Close() session.SetMode(mgo.Monotonic,true) c := session.DB("test").C("people") var p = Person{ Code: "1234",Name: "Bill",} _,err = c.UpsertId( p.Code,&p ) result := Person{} err = c.FindId(p.Code).One(&result) if err != nil { fmt.Println("FindId Error: ",err) return // panic(err) } fmt.Println("Person",result) }
Neil Lunn提供的示例代码如下所示:
package main import ( "fmt" "gopkg.in/mgo.v2" "gopkg.in/mgo.v2/bson" ) type Person struct { Code string Name string } func main() { session,err) return } defer session.Close() session.SetMode(mgo.Monotonic,} upsertdata := bson.M{ "$set": p} info,err2 := c.UpsertId( p.Code,upsertdata ) fmt.Println("UpsertId -> ",info,err2) result := Person{} err = c.FindId(p.Code).One(&result) if err != nil { fmt.Println("FindId Error: ",err) return } fmt.Println("Person",result) }
非常感谢您的关注和帮助Neil.
以上是大佬教程为你收集整理的Golang mongodb mgo driver Upsert / UpsertId文档全部内容,希望文章能够帮你解决Golang mongodb mgo driver Upsert / UpsertId文档所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。