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

BsonRepresentation(BsonType.ObjectId)とBsonIdとObjectIdを使用したC#のプロパティの装飾の違い

    1)Id, id or _idという名前の列がある場合 、強く入力されたTDocument クラス(コレクション内のアイテムタイプ)、次に"_id"という名前の列 Mongoで生成されます。また、その列のインデックスも作成されます。 duplicate key errorが発生します すでに存在するキーでアイテムを挿入しようとした場合の例外。

    public ObjectId Id { get; set; } ObjectIdの型ジェネレーターを使用します _id: ObjectId("57ade20771e59f422cc652d9")のようになります。 。

    public Guid _id { get; set; } Guidジェネレーターを使用して"_id" : BinData(3,"s2Td7qdghkywlfMSWMPzaA==")のようなsmthを生成します 。

    public int Id { get; set; }public string id { get; set; }public byte[] _id { get; set; } 指定されていない場合は、各タイプのデフォルトを使用するインデックス列にもなります。

    2)[BsonId] そのインデックスに任意の方法で名前を付ける柔軟性が得られます。 [BsonId] public Guid SmthElseOtherThanId { get; set; } および[BsonId] public string StringId { get; set; } インデックスになります。 public Guid SmthElseOtherThanId { get; set; } およびpublic string StringId { get; set; } しません。 mongodbは引き続き_idを使用します 内部的に。

    同じロジック、public ObjectId SmthElseOtherThanId {get; set;} [BsonId]なし 装飾はインデックス列にはなりません。

    3)[BsonRepresentation] Mongoタイプと内部.Netタイプを組み合わせることができます。それらの間に変換がある場合

    [BsonId] [BsonRepresentation(BsonType.ObjectId)] public ObjectId Id { get; set; } public ObjectId Id { get; set; }

    [BsonId] [BsonRepresentation(BsonType.ObjectId)] public string Id { get; set; } ただし、違います。 MongoはオブジェクトIDを自分で自動生成しますが、オブジェクトIDと文字列の間で変換が行われるため、.netで文字列を使用したり、クエリをフィルタリングしたりできます。

    [BsonId] [BsonRepresentation(BsonType.ObjectId)] public byte[] Id { get; set; } または[BsonId] [BsonRepresentation(BsonType.ObjectId)] public int Id { get; set; } ObjectId not a valid representation for a ByteArraySerializer / Int32Serializerで失敗します メッセージ。

    ただし、[BsonId] [BsonRepresentation(BsonType.String)] public int StringId { get; set; } 大丈夫です。




    1. PyMongo 3がServerSelectionTimeoutErrorを発生させるのはなぜですか?

    2. Hydra-CLIをパスワード保護redisサーバーに接続しますか?

    3. DBRefでmongodbをクエリする方法

    4. Redis-値がアクティブに書き込まれなくなったときにイベントをトリガーする方法はありますか?