嗨,我根据我的用例使用 mongo 和 golang 我想在插入之前生成一个 _id,因为我正在使用
bson.NewobjectId()
Run Code Online (Sandbox Code Playgroud)
我的结构有点像这样
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"`
}
Run Code Online (Sandbox Code Playgroud)
当我使用这个 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"
}
Run Code Online (Sandbox Code Playgroud)
并将其解码为设备类型,然后使用 decode.ID = bson.NewObjectId() 初始化我的 id
但是当我查看我的数据库时,插入的值奇怪地以这种形式出现
{
"_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")
}
}
Run Code Online (Sandbox Code Playgroud)
我不知道发生这种情况的原因,所以我希望我的数据在一个适当的 mongo 文档中。请帮助我知道为什么会发生这种情况并且正在生成新的 _id
生成 mongodb 的新推荐方法_id是使用primitive.ObjectID. 下面是一个简单的例子
import "go.mongodb.org/mongo-driver/bson/primitive"
type Post struct {
ID primitive.ObjectID `bson:"_id"`
Title string `bson:"title"`
Body string `bson:"body"`
Tags []string `bson:"tags"`
Comments uint64 `bson:"comments"`
CreatedAt time.Time `bson:"created_at"`
UpdatedAt time.Time `bson:"updated_at"`
}
Run Code Online (Sandbox Code Playgroud)
要插入新文档,您将使用 primitive.NewObjectID()
_, err := col.InsertOne(ctx, &Post{
ID: primitive.NewObjectID(),
Title: "post",
Tags: []string{"mongodb"},
Body: `blog post`,
CreatedAt: time.Now(),
})
Run Code Online (Sandbox Code Playgroud)
这是插入结果
{
"_id" : ObjectId("5c71f03ccfee587e4212ad90"),
"title" : "post",
"body" : "blog post",
"tags" : [
"mongodb"
],
"comments" : NumberLong(0),
"created_at" : ISODate("2019-02-24T01:15:40.329Z"),
"updated_at" : null
}
Run Code Online (Sandbox Code Playgroud)
以上代码摘自这篇文章:https : //vkt.sh/go-mongodb-driver-cookbook/