How do you use $setOnInsert
on an Upsert
with any of the mgo
variants of the Go MongoDB drivers?

在带有mgo驱动程序的Upsert上使用$ setOnInsert
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 普通网友 2019-04-11 20:02关注
Given the arbitrary type
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"` }
And the
Upsert
selector, which determines whether or not this will be anUpdate
or anInsert
:selector := bson.M{ "bar": "bar", }
The
Upsert
query to insert a created date only if the document is being inserted will look like this (wherenow
is a variable of typetime.Time
):query := bson.M{ "$setOnInsert": bson.M{ "created": &now, }, "$set": Foo{ Bar: "bar", Modified: &now, }, }
Using all of these defined types and variables with the
globalsign/mgo
driver, this entire query is executed by the following code:if _, err := session.DB("test").C("test").Upsert(selector, query); err != nil { // Handle error }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报