如何在带有Go MongoDB驱动程序的任何mgo
变体的Upsert
上使用$setOnInsert
?
发布于 2019-04-12 04:02:45
给定任意类型的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
}
https://stackoverflow.com/questions/55640319
复制相似问题