sql >> データベース >  >> NoSQL >> MongoDB

MongoDBでのアップサーティングとIdの問題

    同様の問題が発生しました。公式のC#ドライバーを使用してドキュメントをアップサートしたいと思いました。私はこのようなクラスを持っていました:

    public class MyClass
    {
        public ObjectId Id { get; set; }
        public int Field1 { get; set; }
        public string Field2 { get; set; }
    }
    

    コンソールでは、次のように記述します:db.collection.update({Field1: 3},{Field1: 3, Field2: "value"}) そしてそれはうまくいくでしょう。 C#で私は書いた:

    collection.Update(Query.EQ("Field1", 3),
                    Update.Replace(new MyClass { Field1 = 3, Field2 = "value" }),
                    UpdateFlags.Upsert);
    

    そしてそれはうまくいきませんでした!ドライバーの更新ステートメントに空のIDが含まれているため、およびField1例外E11000 duplicate key error indexの値が異なる2番目のドキュメントをアップサートすると がスローされます(この場合、Mongoはdbにすでに存在する_idを持つドキュメントを挿入しようとします)。

    (トピックスターターのように)自分で_idを生成したときに、同じ例外が発生しました(mongo cannot change _id of a document )Field1の既存の値を持つオブジェクトのアップサーティングについて。

    解決策 属性[BsonIgnoreIfDefault]によってIdプロパティをマークすることです (初期化しないでください)。この場合、ドライバーはupdateステートメントの_idフィールドを省略し、MongoDbは必要に応じてIdを生成します。



    1. このMongoDB/Node非同期の問題を回避するにはどうすればよいですか?

    2. MongoDB-集計を使用して配列をアンワインドし、重複を削除します

    3. bson javaの実装が4バイトのincフィールドを使用するのはなぜですか?

    4. node.jsからmongodbに接続するときのECONNREFUSEDエラー