这是我的代码: update := bson.M{"$s" />
登录
首页 >  Golang >  Go问答

在Golang中如何使用MongoDB的$cond操作符

来源:stackoverflow

时间:2024-03-23 23:27:35 434浏览 收藏

在 Golang 中使用 MongoDB 时,`$cond` 操作符可用于有条件地更新字段。但当目标字段不存在时,该操作符可能会导致意外结果,例如返回 `{ $cond: ["exist", "data", newdata] }` 而不是预期的新值。

问题内容

我正在尝试有条件地更新 mongodb 中的字段,如果不存在,预期结果是 newdata,但我得到的结果是 data = {$cond:[exist", "data", newdata]} p>

这是我的代码:

update := bson.M{"$set": bson.M{"data": bson.M{"$cond": []interface{}{"exist", "data", newdata}}}}
collection.UpdateByID(id, update)

谁能帮我看一下吗?


正确答案


如果您不想更改存在的数据,则可以使用 $ifnull 聚合:

update := bson.a{bson.m{$set:bson.m{"data":bson.m{"$ifnull":bson.a{"$data",newdata}}}}}

否则如果你想在任何情况下设置数据;现在似乎没有办法在一次更新中做到这一点。 因此,您必须使用两个反向过滤器在两次单独的更新中执行此操作,如下所示:

//first filter
 bson.M{"data":{"$exists":true}}
//second filter
 bson.M{"data":{"$exists":false}}

请注意,使用 bson.a 来实现数组(用括号 [] 表示)

今天关于《在Golang中如何使用MongoDB的$cond操作符》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>