2017-04-07 8 views
1

私はGoでWebサイトを実行していて、MGOパッケージを使用してMongoDBデータベースに接続しています。Golang MGO - 挿入または更新が正常に動作しない

ユーザーのサインインを処理していますが、func Upsert()を使用してデータベースに存在するユーザーを更新しようとしています。

Upsert()(下のコード)を実行すると、2番目の引数の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コレクションに存在する場合、ドキュメントを更新するにはどうすればいいですか?

答えて

2

あなたが提供するフィールドでドキュメントを更新しようとしていて、他のフィールドをすべて無視しようとすると、まず選択しないとできないと思います。

See this question on stack overflow

EDIT:は 試してください:あなたは、私はMongoDBのに2つのクエリを作成する必要があり

db.C("users").Upsert( bson.M{"email": "[email protected]"}, bson.M{"$set": bson.M{"displayName": "My name was updated"}}, )

+0

を言っていますか?選択し、エラーをチェックしてください(存在しない場合は更新/存在する場合は挿入してください)。 – Acidic

+0

あなたは '$ set'演算子を使用する必要があることを理解していないと分かりません。 何かが好きです: ' bson.M {"$ set":bson.M {"displayName": "私の名前が更新されました"}} ' – Zak

+0

テストされた、それは動作します。ありがとうございました! :) – Acidic

関連する問題