公式C#ドライバを使用してmongo dbにアップデート中に問題が発生しました。Mongo DBのアップデートとIdの問題
public abstract class AggregateRoot
{
/// <summary>
/// All mongoDb documents must have an id, we specify it here
/// </summary>
protected AggregateRoot()
{
Id = ObjectId.GenerateNewId();
}
[BsonId]
public ObjectId Id { get; set; }
}
私の実体はすでにID-Sを持っているが、私は、コレクション内のすべてのドキュメントが1つを持っている必要があるとして、それを動作させるためにMongoの特定のIDを作成する必要がありました。今では私のシステムで新しいエンティティを受け取って、新しいMongo Idが生成されて、mongoは文書の古い_idを変更できません。例外。回避策はありますか?
デザインを少し説明しましょう。ドキュメントとして格納される であるすべてのエンティティは、その中に というIDを生成したAggregateRootから継承していました。すべてのサブ文書にはidが自動的に で生成されていましたが、問題はありませんでした。 MongoCollectionからListにデータを取得するときにAggregateRootのID が導入され、id-s が異なるように生成が導入されました。今度は、更新のための新しいエンティティが新しいID生成を持っていたので、そのID生成をメソッド を保存するように移動できます。しかし、 は、チームのすべての開発者が危険なリポジトリ内のID- を生成することを忘れてはならないことを意味します。それはちょうどそれが可能であればモンゴからのマッピングよりID を無視して、あなたが明示的に挿入と更新の両方に
Id
値を設定する可能性があるように見えるすべての
どのようにオブジェクトを保存していますか? BsonId属性はMongoDBにあなたのidとしてそのフィールドを使用させるべきです。 –
考えられるのは、データが外部システムからストレージに送られるということです。それは私が保管しなければならない独自のIDを持っています。そして、これはMongoとの互換性のための偽のIDです。すべてのドキュメントはAggregateRootを継承しているので、すべてのオブジェクトを受け取ると生成されます。私は同じデータを受け取るかもしれないが、生成されたmongo idは異なっていることは明らかです。だから例外が表示されます –