2016-08-25 1 views
0

Привета я использую Монго и golang по моему прецеденту я хочу, чтобы генерировать _id перед вставкой, для этого я используюGolang Монго Вставка с самогенерирующимся _Id использованием bson.NewObjectID(), что приводит к неожиданной схеме

bson.NewobjectId() 

моя структура несколько походит на этом

type Device struct { 
    Id    bson.ObjectId `bson:"_id" json:"_id,omitempty"` 
    UserId   string  `bson:"userId" json:"userId"` 
    CategorySlug string  `bson:"categorySlug" json:"categorySlug"` 
    CreatedAt  time.Time  `bson:"createdAt" json:"createdAt"` 
    ModifiedAt  time.Time  `bson:"modifiedAt" json:"modifiedAt"` 
    BrandId  int   `bson:"brandId" json:"brandId"` 
    Category  string  `bson:"category" json:"category"` 
} 

, когда я использую этот запрос JSon

{ 
    "userId" : "gKn42jJD8uy8ksQpi", 
    "categorySlug" : "television", 
    "createdAt" : "2016-08-25T18:47:29.558Z", 
    "modifiedAt" : "2016-08-25T18:47:29.558Z", 
    "brandId" : 90, 
    "category" : "LED TV", 
    "dateOfPurchase" : "2016-08-25T18:47:29.558Z" 
} 

и декодирует это в тип устройства и после этого инициализировать мой идентификатор, используя decode.ID = bson.NewObjectId()

, но когда я посмотрел в мою базу данных вставленное значение ИТС странно в таком виде

{ 
    "_id" : ObjectId("57bf425a34ce5ee85891b914"), 
    "0" : { 
     "_id" : ObjectId("57bf425ae03ec2179a000001"), 
     "userId" : "gKn42jJD8uy8ksQpi", 
     "categorySlug" : "television", 
     "createdAt" : ISODate("2016-08-25T18:47:29.558Z"), 
     "modifiedAt" : ISODate("2016-08-25T18:47:29.558Z"), 
     "brandId" : 90, 
     "category" : "LED TV", 
     "dateofpurchase" : ISODate("2016-08-25T18:47:29.558Z") 
    } 
} 

Я не знаю причины, почему это происходит, поэтому я хочу, чтобы мои данные были надлежащим документом mongo. Пожалуйста, помогите мне понять, почему эта вещь происходит, и создается новый _id.

ответ

0

Я уверен, что это что-то с вашим другим кодом. Следующий код (который использует вашу структуру данных) correctly inserts single entries.

package main 

import (
    "gopkg.in/mgo.v2" 
    "gopkg.in/mgo.v2/bson" 
    "time" 
) 

type Device struct { 
    Id   bson.ObjectId `bson:"_id" json:"_id,omitempty"` 
    UserId  string  `bson:"userId" json:"userId"` 
    CategorySlug string  `bson:"categorySlug" json:"categorySlug"` 
    CreatedAt time.Time  `bson:"createdAt" json:"createdAt"` 
    ModifiedAt time.Time  `bson:"modifiedAt" json:"modifiedAt"` 
    BrandId  int   `bson:"brandId" json:"brandId"` 
    Category  string  `bson:"category" json:"category"` 
} 

func main() { 
    session, err := mgo.Dial("mongodb://127.0.0.1:27017/so") 

    if err != nil { 
     panic(err) 
    } 
    defer session.Close() 
    session.SetMode(mgo.Monotonic, true) 

    c := session.DB("so").C("insrt") 

    doc := Device{ 
     Id:   bson.NewObjectId(), 
     UserId:  "gKn42jJD8uy8ksQpi", 
     CategorySlug: "television", 
     CreatedAt: time.Now(), 
     ModifiedAt: time.Now(), 
     BrandId:  90, 
     Category:  "LED TV", 
    } 

    err = c.Insert(doc) 
    if err != nil { 
     panic(err) 
    } 
}