0

次のように、MongoDB にドキュメントを深く埋め込んでいます。

[
 {
  id : 1,
  stuff : [
           {
            id : 1,
            morestuff: [
                        {id : 1, text : "foo"},
                        {id : 2, text : "boo"}
                       ]
           },
           {
            id : 2,
            morestuff: [
                        {id : 1, text : "foo2"},
                        {id : 2, text : "boo2"}
                       ]
           } 
          ]
 }
]

私のC#表現は次のようなものです:

class CoreElement
{
    public int id { get; set; }
    public List<Stuff> stuff { get; set; }
}
class Stuff
{
    public int id { get; set; }
    public List<MoreStuff> morestuff { get; set; }
}
class MoreStuff
{
    public int id { get; set; }
    public string text { get; set; }
}

今、私はさまざまな状況を持つことができます:

  1. 指定された ID の CoreElement が存在しません
  2. 指定された ID のものは CoreElement のリストにありません
  3. MoreStuff は、CoreElement の Stuff のリストにありません

そのようなオブジェクトを作成すると:

CoreElement ce = new CoreElement();
ce.id = 1;
Stuff st = new Stuff();
st.id = 2;
MoreStuff ms = new MoreStuff();
ms.id = 17;
ms.text = "something";
st.morestuff.Add(ms);
ce.stuff.Add(st);

コレクションに upsert して、MoreStuff が既に存在する場合は適切なドキュメントに追加する方法、または存在しない場合は新しいドキュメント (CoreElement または Stuff) を作成する方法はありますか?

どんな助けでも感謝します。ありがとう。

4

1 に答える 1

2

$addToSetで試してください

$addToSet 演算子は、値がまだ配列にない場合にのみ、値を配列に追加します。値が配列内にある場合、$addToSet は配列を変更せずに戻ります。

他にできることは、CoreElement をロードしてメモリ内で操作することです。C# で重複をチェックするオブジェクトに Suffs と MoreStuffs を追加できます。オブジェクトを保存したら、MongoDB はコレクション内のオブジェクトを変更したオブジェクトに置き換えます。

于 2013-06-25T15:25:37.360 に答える