如何将$setOnInsert
上的Upsert
与Go MongoDB驱动程序的任何mgo
变体一起使用?
答案 0 :(得分:1)
给出任意类型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
}