1
我在Go中運行網站,並使用MGO包與我的MongoDB數據庫連接。Golang MGO - 插入或更新不能按預期工作
我正在處理用戶的登錄,並且我試圖使用func Upsert()
更新用戶,如果它們存在於數據庫中,請將其插入。
問題是,當我運行Upsert()
(下面的代碼)時,它會替換所有字段而不是隻更新第二個參數bson.M{}
中的當前字段。
db.C("users").Upsert(
bson.M{"email": "[email protected]"}, // Which doucment to upsert
bson.M{"displayName": "Johhny"}, // What to replace
)
的什麼,我試圖解釋一個可視化的例子。
現有的數據庫文件:
{
"_id" : ObjectId("58e7589bab64da55ebcf5d25"),
"email" : "[email protected]",
"password" : "",
"age": 69,
"displayName" : "Someone!"
}
運行後:
db.C("users").Upsert(
bson.M{"email": "[email protected]"},
bson.M{"displayName": "My name was updated"},
)
文件變爲:
{
"_id" : ObjectId("58e789feab64da55ebcf691c"),
"displayName" : "My name was updated"
}
當我預計該文檔以:
{
"_id" : ObjectId("58e7589bab64da55ebcf5d25"),
"email" : "[email protected]",
"password" : "",
"age": 69,
"displayName" : "My name was updated" // This should be updated, all others should be left untouched
}
最後是我的問題。
如何更新文檔,如果它已經存在於MongoDB集合中,否則插入它?
你是說我需要做兩個查詢到MongoDB的?選擇,然後檢查錯誤(如果它不存在則更新)/如果它存在則插入)類似的東西? – Acidic
對不起,我想不明白,你需要使用'$ set'運算符 類似於: 'bson.M {「$ set」:bson.M {「displayName」:「我的名字已更新」}}' – Zak
Just測試,,,它的作品。謝謝! :) – Acidic