duanche5149 2016-02-08 11:55
浏览 118

如何使用go在mongodb中插入嵌套结构的多个值

I am trying to insert multiple values with nested struct in mongodb with golang ... Like this

{  "_id" : ObjectId("56b879528d04effa4ae2de2c"), 
   "task_content" : "Some text",
   "priority" : "2", 
   "deadline" : { 
      "start_time" : ISODate("2009-04-04T00:00:00Z"), 
      "end_time" : ISODate("2009-05-04T00:00:00Z") 
   },
   "users" : {
      "u_status" : "Completed",
      "u_name" : john_smith,
      "u_status" : "Completed",
      "u_name" : harry_potter
   },
 }

Is this possible to do in mongo. i.e. there are same name of keys but the values are different.. Here is Sample code which i tried

type deadLine struct {
    Start_time  time.Time `bson:"start_time"`
    End_time    time.Time `bson:"end_time"`
  }
  type users struct {
    Status  string `bson:"u_status"`
    User_name  string `bson:"u_name"`
  }
  type taskData struct {
    Id bson.ObjectId  `bson:"_id"`
    Task_content string  `bson:"task_content"`
    Priority string  `bson:"priority"`
    deadLine
    users     []users

  }

func TaskToDo(w http.ResponseWriter, r *http.Request) {
    var doc taskData
    retMap := make(map[string]map[string]string)
    retMap["user"]["1"] = "john_smith"
    retMap["user"]["2"] = "harry_potter"

    stime, _ := time.Parse("2006/01/02","2009-04-04")
    etime, _ := time.Parse("2006/01/02","2009-05-04")


    doc = taskData{Id: bson.NewObjectId(),
      Task_content:"Some text", Priority:"2",
      deadLine:deadLine{
        Start_time:stime,
        End_time:etime,
      }}

    for i := 1; i <= len(retMap["user"]);i++ {
      doc.users = append(doc.users, users{
        User_name : retMap["user"][strconv.Itoa(i)],
        Status : "Completed",

      })
    }
    fmt.Println(doc)
    err := collection.Insert(doc)
    if err != nil {
      fmt.Printf("Can't insert document: %v
", err)
      fmt.Fprintf(w,"%s","Can't insert document:%v
", err)
      os.Exit(1)
      }else{
        fmt.Println("Task Inserted Successfully ... ")
      }
}

Ignore Some basic mistakes in sample code. Kindly help me Thanks in advance

  • 写回答

1条回答 默认 最新

  • doukanmang3687 2016-02-08 16:22
    关注

    You need to export your sub structs to make this work.

    Like this:

    type deadLine struct {
        Start_time  time.Time `bson:"start_time"`
        End_time    time.Time `bson:"end_time"`
    }
    type users struct {
        Status  string `bson:"u_status"`
        User_name  string `bson:"u_name"`
    }
    type taskData struct {
        Id bson.ObjectId  `bson:"_id"`
        Task_content string  `bson:"task_content"`
        Priority string  `bson:"priority"`
        DeadLine deadline `bson:"deadline"`
        Users     []users `bson:"users"`
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?