首頁 >後端開發 >Golang >Golang 和 MongoDB - 我嘗試使用 golang 將切換布林值更新為 mongodb,但得到了對象

Golang 和 MongoDB - 我嘗試使用 golang 將切換布林值更新為 mongodb,但得到了對象

WBOY
WBOY轉載
2024-02-14 22:40:151040瀏覽

Golang 和 MongoDB - 我尝试使用 golang 将切换布尔值更新为 mongodb,但得到了对象

問題內容

我曾經使用 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.Mbson.D)作為更新文檔,欄位名稱和值將按原樣(字面意思)解釋。

使用帶有更新的聚合管道 a>,您必須傳遞一個數組作為更新文檔,這會觸發將其解釋為聚合管道。這是唯一的要求。此陣列可能是mongo.Pipeline, bson.A[]bson.D [ ]bson.M 甚至[]any,沒關係,它必須是Go 中的陣列或切片。這些元素可以是 bson.Mbson.D 或表示文件的任何其他值。

最簡單的解決方案:

filter := bson.M{"_id": id}
update := []any{
    bson.M{"$set": bson.M{"watched": bson.M{"$not": "$watched"}}}
}

以上是Golang 和 MongoDB - 我嘗試使用 golang 將切換布林值更新為 mongodb,但得到了對象的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除