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 }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
- ¥15 Vue3地图和异步函数使用
- ¥15 C++ yoloV5改写遇到的问题
- ¥20 win11修改中文用户名路径
- ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
- ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
- ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
- ¥15 帮我写一个c++工程
- ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
- ¥15 关于smbclient 库的使用