使用mgo golang mongodb动态插入多个文档

Nid*_*vid 2 database go mongodb nosql mgo

如何仅使用单个DB 调用(如db.collection.insert() 中的那样,使用mgo库将文档数组插入到 MongoDB 中?

我有以下Transaction结构:

    type Transaction struct {
    Brand         string `json:"brand"`
    Name          string `json:"name"`
    Plu           string `json:"plu"`
    Price         string `json:"price"`
  }
Run Code Online (Sandbox Code Playgroud)

POST请求中,我将收到这些结构的数组。我想将它们作为单独的文档插入到 MongoDB 中,但使用单个 DB 调用,如db.collection.insert() 中所述

我尝试使用c.Insertmgo

以下是代码片段:

  func insertTransaction(c *gin.Context) {
    var transactions []Transaction
    err := c.BindJSON(&transactions)
    if err != nil {
        c.AbortWithStatusJSON(http.StatusBadRequest, map[string]string{"error":"invalid JSON"})
        return
    }
    err = InsertTransactons(transactions)
    if err != nil {
        c.AbortWithStatusJSON(http.StatusInternalServerError, &map[string](interface{}){
            "status":  "error",
            "code":    "500",
            "message": "Internal server error",
            "error": err,
        })
        return
    }
    c.JSON(http.StatusCreated, &map[string](interface{}){
        "status":  "success",
        "code":    "0",
        "message": "created",
    })
  }


  func InsertTransactons(u []Transaction) error {
    s := GetSession()
    defer s.Close()
    c := s.DB(DB).C(TransactionColl)
    err := c.Insert(u...)
    if err != nil {
        return err
    }
    return nil
  }
Run Code Online (Sandbox Code Playgroud)

但是当我编译并运行代码时,出现以下错误:

go/database.go:34:17: 不能在 c.Insert 的参数中使用 u (type *[]Transaction) 作为 type []interface {}

ved*_*yas 9

你不能[]*Transaction作为[]interface{}. 您需要将每个转换Transactioninferface{}以更改其内存布局。

var ui []interface{}
for _, t := range u{
    ui = append(ui, t)
}
Run Code Online (Sandbox Code Playgroud)

通过用户界面c.Insert,而不是

  • 谢谢老兄..它奏效了!我希望如果不需要“范围” (2认同)