MongoDB:如何在Golang中将附加对象插入到对象集合中?

huangapple go评论121阅读模式
英文:

MongoDb : How to insert additional object into object collection in golang?

问题

我只会翻译你提供的内容,以下是翻译好的部分:

我只想将对象推入MongoDB中的对象数组。

  1. {
  2. "_id" : ObjectId("51c9cf2b206dfb73d666ae07"),
  3. "firstName" : "john",
  4. "lastName" : "smith",
  5. "ownerEmail" : "john.smith@gmail.com",
  6. "camps" : [
  7. {
  8. "name" : "cubs-killeen",
  9. "location" : "killeen"
  10. },
  11. {
  12. "name" : "cubs-temple",
  13. "location" : "temple"
  14. }
  15. ],
  16. "instructors" : [
  17. {
  18. "firstName" : "joe",
  19. "lastName" : "black"
  20. },
  21. {
  22. "firstName" : "will",
  23. "lastName" : "smith"
  24. }
  25. ]
  26. }

要将对象推入上述文档中,需要执行以下操作:

  1. db.stack.update({"ownerEmail":"john.smith@gmail.com"},
  2. {$push: {
  3. "camps":{ "name":"cubs-killeen","location":"some other Place" }
  4. }
  5. }
  6. )

那么如何使用mgo驱动程序实现相同的功能呢?

英文:

I want just push object into array of objects in mongodb

  1. {
  2. "_id" : ObjectId("51c9cf2b206dfb73d666ae07"),
  3. "firstName" : "john",
  4. "lastName" : "smith",
  5. "ownerEmail" : "john.smith@gmail.com",
  6. "camps" : [
  7. {
  8. "name" : "cubs-killeen",
  9. "location" : "killeen"
  10. },
  11. {
  12. "name" : "cubs-temple",
  13. "location" : "temple"
  14. }
  15. ],
  16. "instructors" : [
  17. {
  18. "firstName" : "joe",
  19. "lastName" : "black"
  20. },
  21. {
  22. "firstName" : "will",
  23. "lastName" : "smith"
  24. }
  25. ]
  26. }

and to push object into above document in need to do

  1. db.stack.update({"ownerEmail":"john.smith@gmail.com"},
  2. {$push: {
  3. "camps":{ "name":"cubs-killeen","location":"some other Place" }
  4. }
  5. }
  6. )

So how can i implement same functionality using mgo driver

答案1

得分: 2

尝试以下代码:

  1. session, err := mgo.Dial("127.0.0.1")
  2. if err != nil {
  3. panic(err)
  4. }
  5. defer session.Close()
  6. session.SetMode(mgo.Monotonic, true)
  7. // 删除数据库
  8. if IsDrop {
  9. err = session.DB("test").DropDatabase()
  10. if err != nil {
  11. panic(err)
  12. }
  13. }
  14. // 集合 Stack
  15. c := session.DB("test").C("stack")
  16. // 查询
  17. query := bson.M{"ownerEmail": "john.smith@gmail.com"}
  18. update := bson.M{"$push": bson.M{"camps": bson.M{"name": "cubs-killeen", "location": "some other Place"}}}
  19. // 更新
  20. err = c.Update(query, update)
  21. if err != nil {
  22. panic(err)
  23. }

这是一个使用 mgo 包进行 MongoDB 操作的示例代码。它连接到本地的 MongoDB 服务器,设置会话模式为 Monotonic,然后执行一些操作,包括删除数据库、查询和更新。

英文:

Try the following:

  1. session, err := mgo.Dial("127.0.0.1")
  2. if err != nil {
  3. panic(err)
  4. }
  5. defer session.Close()
  6. session.SetMode(mgo.Monotonic, true)
  7. // Drop Database
  8. if IsDrop {
  9. err = session.DB("test").DropDatabase()
  10. if err != nil {
  11. panic(err)
  12. }
  13. }
  14. // Collection Stack
  15. c := session.DB("test").C("stack")
  16. // Query
  17. query := bson.M{"ownerEmail": "john.smith@gmail.com"}
  18. update := bson.M{"$push": bson.M{"camps": bson.M{"name": "cubs-killeen", "location": "some other Place"}}}
  19. // Update
  20. err = c.Update(query, update)
  21. if err != nil {
  22. panic(err)
  23. }

答案2

得分: 2

我假设你的代码库中有一个类似于Camps的结构体:

  1. type Camps struct {
  2. Name string `json:"name,omitempty"`
  3. Location string `json:"location,omitempty"`
  4. }

Golang代码:

  1. database := "yourDatabaseName"
  2. collection := "stack"
  3. session, err := mgo.Dial("127.0.0.1")
  4. if err != nil {
  5. panic(err)
  6. }
  7. defer session.Close()
  8. session.SetMode(mgo.Monotonic, true)
  9. c := session.DB(database).C(collection)
  10. data := model.Camps{
  11. Name: "cubs-killeen",
  12. Location: "some other Place",
  13. }
  14. selector := bson.M{"ownerEmail": "john.smith@gmail.com"}
  15. changes := bson.M{"$push": bson.M{"camps": bson.M{"$each": []model.Camps{data}}}}
  16. err = c.Update(selector, changes)
  17. if err != nil {
  18. panic(err)
  19. }

请注意,这只是一个示例代码,具体的数据库名称、集合名称和其他参数需要根据你的实际情况进行修改。

英文:

I assume your codebase has Camps struct similar to:

  1. <!-- begin snippet: js hide: false console: true babel: false -->
  2. type Camps struct {
  3. Name string `json:"name,omitempty"`
  4. Location string `json:"location,omitempty"`
  5. }
  6. <!-- end snippet -->

Golang code:

  1. <!-- begin snippet: js hide: false console: true babel: false -->
  2. database := "yourDatabaseName"
  3. collection := "stack"
  4. session, err := mgo.Dial("127.0.0.1")
  5. if err != nil {
  6. panic(err)
  7. }
  8. defer session.Close()
  9. session.SetMode(mgo.Monotonic, true)
  10. c := session.DB(database).C(collection)
  11. data := model.Camps{
  12. Name: "cubs-killeen",
  13. Location: "some other Place",
  14. }
  15. selector := bson.M{"ownerEmail": "john.smith@gmail.com"}
  16. changes := bson.M{"$push": bson.M{"camps": bson.M{"$each": []model.Camps{data}}}}
  17. err = c.Update(selector, changes)
  18. if err != nil {
  19. panic(err)
  20. }
  21. <!-- end snippet -->

huangapple
  • 本文由 发表于 2015年4月23日 16:16:55
  • 转载请务必保留本文链接:https://go.coder-hub.com/29817535.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定