私はMongoDBでとても新しいです(1日の学習に費やすだけです)。私は解決するのが比較的簡単な問題を抱えています。私はこの機会を利用して、この人気のあるnosqlデータベースについて学びます。MongoDB C#ドライバ2.0コレクションを更新して重複を無視します
public class Item
{
[BsonId]
public string ItemId { get; set; }
public string Name { get; set; }
public ICollection<Detail> Details { get; set; }
}
public class Detail
{
//[BsonId]
public int DetailId { get; set; }
public DateTime StartDate { get; set; }
public double Qty { get; set; }
}
は、私は詳細コレクションに複数のオブジェクト(詳細)を追加できるようにしたい:C#ので は、私は以下のクラスを持っています。しかし、私が持っているアイテムのいくつか(残りのAPIから来ている)はすでにデータベースに保存されており、重複を避けたいと思っています。 これまでのところ、私はそれを行うための2つの方法を考えることができますが、私はどちらかと本当に満足していない:
はMongoDBのから(アイテムごと)保存されているすべての詳細を取得して、.NETで、私は をフィルタリングして見つけることができます新しい項目を追加し、それらをdbに追加します。このようにして、重複がないことを確信できます。しかしそれは理想的な解決策からは遠いです。
[BsonId]属性をDetailIdに追加できます(この属性がないとこのソリューションは機能しません)。次にAddToSetEachを使用します。これはうまくいくと私の唯一の問題は、私がそれをかなり理解していないということです。つまり、新しいオブジェクトがデータベースにまだ存在しない場合は、 のオブジェクトのみを追加することになりますが、それはどのようにして知ることができますか?どのようにオブジェクトを比較するのですか?その比較プロセスを支配していますか?カスタム比較商品を提供できますか?また、同じDetailIdを持つ2つのオブジェクトを渡すと(実際のアプリケーションではこのようなことは起こりません)、BsonId属性は一意性を保証しません。
この問題の解決策はありますか?基本的には、別のコレクション(すでにdbに格納されているオブジェクトの一部(つまり最初のコレクション)が含まれていることがわかっています)を渡してすべての重複を無視して、Detailsコレクションを更新したいだけです。