在带有 mgo 驱动程序的 Upsert 上使用 $setOnInsert
Using $setOnInsert on Upsert With mgo Driver
如何在 Upsert
上使用 $setOnInsert
和 Go MongoDB 驱动程序的任何 mgo
变体?
给定任意类型Foo
:
type Foo struct {
ID bson.ObjectId `json:"_id,omitempty" bson:"_id,omitempty"`
Bar string `json:"bar" bson:"bar"`
Created *time.Time `json:"created,omitempty" bson:"created,omitempty"`
Modified *time.Time `json:"modified,omitempty" bson:"modified,omitempty"`
}
和 Upsert
选择器,它决定这是 Update
还是 Insert
:
selector := bson.M{
"bar": "bar",
}
仅在插入文档时才插入创建日期的 Upsert
查询如下所示(其中 now
是 time.Time
类型的变量):
query := bson.M{
"$setOnInsert": bson.M{
"created": &now,
},
"$set": Foo{
Bar: "bar",
Modified: &now,
},
}
将所有这些定义的类型和变量与 globalsign/mgo
驱动程序一起使用,整个查询由以下代码执行:
if _, err := session.DB("test").C("test").Upsert(selector, query); err != nil {
// Handle error
}
如何在 Upsert
上使用 $setOnInsert
和 Go MongoDB 驱动程序的任何 mgo
变体?
给定任意类型Foo
:
type Foo struct {
ID bson.ObjectId `json:"_id,omitempty" bson:"_id,omitempty"`
Bar string `json:"bar" bson:"bar"`
Created *time.Time `json:"created,omitempty" bson:"created,omitempty"`
Modified *time.Time `json:"modified,omitempty" bson:"modified,omitempty"`
}
和 Upsert
选择器,它决定这是 Update
还是 Insert
:
selector := bson.M{
"bar": "bar",
}
仅在插入文档时才插入创建日期的 Upsert
查询如下所示(其中 now
是 time.Time
类型的变量):
query := bson.M{
"$setOnInsert": bson.M{
"created": &now,
},
"$set": Foo{
Bar: "bar",
Modified: &now,
},
}
将所有这些定义的类型和变量与 globalsign/mgo
驱动程序一起使用,整个查询由以下代码执行:
if _, err := session.DB("test").C("test").Upsert(selector, query); err != nil {
// Handle error
}