如何在 golang 中使用 MongoDB $cond
how to use MongoDB $cond in golang
我正在尝试有条件地更新 MongoDB 中的一个字段,如果不存在,预期结果是新数据,但我得到的结果是 data = {$cond:[exist", "data", newdata]}
这是我的代码:
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
来实现数组(用括号知道[]
)
我正在尝试有条件地更新 MongoDB 中的一个字段,如果不存在,预期结果是新数据,但我得到的结果是 data = {$cond:[exist", "data", newdata]}
这是我的代码:
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
来实现数组(用括号知道[]
)