15

アプリケーションはMongoのGuidフィールドを保持し、最終的にBinDataとして保存されます。

"_id" : new BinData(3, "WBAc3FDBDU+Zh/cBQFPc3Q==")

この場合の利点はコンパクトさであり、アプリケーションのトラブルシューティングが必要なときに欠点が現れます。GUIDはURLを介して渡され、Mongoコンソールに移動するときに常にBinDataに変換するのは少し面倒です。

サイズの増加に加えて、Guidを文字列として格納することの欠点は何ですか?1つの利点は、トラブルシューティングが簡単なことです。

"_id" : "3c901cac-5b90-4a09-896c-00e4779a9199"

C#の永続エンティティのプロトタイプは次のとおりです。

class Thing
{
    [BsonIgnore]
    public Guid Id { get; set; }

    [BsonId]
    public string DontUseInAppMongoId
    {
        get { return Id.ToString(); }
        set { Id = Guid.Parse(value); }
    }
}
4

2 に答える 2

15

gregorの回答に加えて、Guidを使用すると、バイナリタイプとして表されるため、現在、新しいAggregationFrameworkを使用できなくなります。とにかく、あなたはあなたが望むことをより簡単な方法で行うことができます。これにより、mongodbbsonライブラリが変換の実行を処理できるようになります。

public class MyClass
{
  [BsonRepresentation(BsonType.String)]
  public Guid Id { get; set;}
}
于 2012-08-14T12:13:49.190 に答える
5

欠点は、mongodbがBSON ObjectIDを使用するように最適化されているため、ObjectIDとして文字列を使用する効率がわずかに低下することです。また、文字列ObjectIDに対して範囲ベースのクエリを使用する場合は、辞書式比較が使用され、予想とは異なる結果が得られる可能性があります。それ以外は、文字列をObjectIDとして使用できます。ObjectIDの最適化 http://www.mongodb.org/display/DOCS/Optimizing+Object+IDsを参照してください

于 2012-08-14T11:34:57.753 に答える