我曾经使用React和Nodejs实现todo应用程序。React和Nodejs中的toggle函数用于更新Mongodb数据库,如下代码所示:
const toggleChecked = ({ _id, isChecked }) => {
TasksCollection.update(_id, {
$set: {
isChecked: !isChecked
}
})
};
字符串
我想在Golang中实现toggle函数来更新boolean字段,但我得到了object,以下是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中的结果更新为对象而不是布尔值。我如何修复以使其更新为布尔值?
2条答案
按热度按时间t8e9dugd1#
传递单个文档(例如
bson.M
或bson.D
)作为更新文档,字段名称和值将按原样(字面意思)解释。要使用aggregation pipelines with updates,你必须传递一个数组作为更新文档,这就是触发器将其解释为聚合管道的原因。这是唯一的要求。数组可以是
mongo.Pipeline
,bson.A
,[]bson.D
,[]bson.M
甚至[]any
,这无关紧要,它必须是Go中的数组或切片。元素可以是bson.M
,bson.D
或表示文档的任何其他值。所以最简单的解决方案是:
字符串
jckbn6z72#
我找到了解决方案,我使用管道与bson.D作为以下代码:
字符串
结果,我可以正确地更新布尔值。