问题内容
我曾经使用 React 和 Nodejs 来实现 todo 应用程序。 React 和 Nodejs 中更新 Mongodb 数据库的切换功能如下代码:
const toggleChecked = ({ _id, isChecked }) => {
TasksCollection.update(_id, {
$set: {
isChecked: !isChecked
}
})
};
登录后复制
我想在Golang中实现切换功能来更新布尔字段,但我得到了对象,以下是golang代码:
func updateOneMovie(movieId string) model.Netflix {
id, _ := primitive.ObjectIDFromHex(movieId)
filter := bson.M{"_id": id}
update := bson.M{"$set": bson.M{"watched": bson.M{"$not": "$watched"}}}
var updateResult model.Netflix
result, err := collection.UpdateOne(context.Background(), filter, update)
err = collection.FindOne(context.Background(), filter).Decode(&updateResult)
if err != nil {
log.Fatal(err)
}
fmt.Println(result)
return updateResult
}
登录后复制
Mongodb 中的结果更新为对象而不是布尔值。我该如何修复以使其更新切换布尔值?
解决方法
传递单个文档(例如 bson.M
或bson.D
)作为更新文档,字段名称和值将按原样(字面意思)解释。
使用带有更新的聚合管道 a>,您必须传递一个数组作为更新文档,这会触发将其解释为聚合管道。这是唯一的要求。该数组可能是 mongo.Pipeline
, bson.A
,[]bson.D
, []bson.M
甚至 []any
,没关系,它必须是 Go 中的数组或切片。这些元素可以是 bson.M
、bson.D
或表示文档的任何其他值。
最简单的解决方案:
filter := bson.M{"_id": id}
update := []any{
bson.M{"$set": bson.M{"watched": bson.M{"$not": "$watched"}}}
}
登录后复制
以上就是Golang 和 MongoDB - 我尝试使用 golang 将切换布尔值更新为 mongodb,但得到了对象的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!