2013-06-25 112 views
0

我已經深深嵌入文檔MongoDB中,像這樣:MongoDB的C#驅動upserting嵌套文件

[ 
{ 
    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. Stu FF與給定的ID不在CoreElement名單上
  3. MoreStuff不CoreElement

在功能的列表。如果我創建這樣的一個對象:

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); 

有沒有一種辦法將它插入到我的集合中,以便在已存在的情況下將MoreStuff添加到相應的文檔中,或者創建新文檔(CoreElement或Stuff)(如果它尚不存在)?

任何幫助表示讚賞。謝謝。

+0

你用'$ push'試過了upsert嗎? – WiredPrairie

回答

2

嘗試用$addToSet

的$ addToSet運營商增加值到一個數組只有當值不是數組中了。如果該值在數組中,$ addToSet將返回而不修改數組。

你可以做的其他事情是加載你的CoreElement並在內存中使用它。你可以添加Suffs和MoreStuffs到檢查C#重複項的對象。當你完成對象的保存時,MongoDB將用你修改的對象替換集合中的對象。