Ich habe React und Nodejs verwendet, um eine Todo-Anwendung zu implementieren. Die Umschaltfunktion zum Aktualisieren der Mongodb-Datenbank in React und Nodejs ist wie folgt:
const toggleChecked = ({ _id, isChecked }) => { TasksCollection.update(_id, { $set: { isChecked: !isChecked } }) };
Ich möchte die Umschaltfunktion in Golang implementieren, um das boolesche Feld zu aktualisieren, aber ich habe ein Objekt erhalten. Es folgt der Golang-Code:
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 }
Ergebnisse in Mongodb werden als Objekte statt als boolesche Werte aktualisiert. Wie kann ich das Problem beheben, sodass der boolesche Toggle-Wert aktualisiert wird?
Übergeben Sie ein einzelnes Dokument (z. B. bson.M
或bson.D
) als Aktualisierungsdokument und die Feldnamen und Werte werden so interpretiert, wie sie sind (wörtlich).
Mit der Aggregation Pipeline with Updates a> müssen Sie ein Array als Update-Dokument übergeben, was dessen Interpretation als Aggregation-Pipeline auslöst. Dies ist die einzige Voraussetzung. Das Array kann mongo.Pipeline
, bson.A
,[]bson.D
, []bson.M
甚至 []any
,没关系,它必须是 Go 中的数组或切片。这些元素可以是 bson.M
、bson.D
oder ein beliebiger anderer Wert sein, der das Dokument darstellt.
Einfachste Lösung:
filter := bson.M{"_id": id} update := []any{ bson.M{"$set": bson.M{"watched": bson.M{"$not": "$watched"}}} }
Das obige ist der detaillierte Inhalt vonGolang und MongoDB – Ich habe versucht, Toggle Boolean mit Golang auf Mongodb zu aktualisieren, habe aber das Objekt erhalten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!