2015-02-09 2 views
0

Может кто-то просто объяснить, как сэкономить на многоуровневых моделях mongodb! Я понимаю, что может быть где-то здесь. Я смогу найти ответ, но все, что я нахожу здесь, НЕ работает для меня.mongodb. C#. Не удается сохранить многоуровневую модель для db

у меня есть несколько моделей А, В, С, D, Е:

  • _id
  • некоторые поля
  • B []
    • _id
    • некоторые поля
    • C []
      • _id
      • некоторые поля
      • D []
        • _id
        • некоторые поля
        • Е []
          • _id
          • некоторые поля

Первый уровень экономии ОК! Сохранение второго уровня в порядке! Третий уровень я сделать так:

 IMongoQuery query = Query.And(Query<A>.EQ(a => a.A_Id, data.A_Id), 
      Query<A>.ElemMatch<Wall>(a => a.B, b => b.EQ(tt => tt.B_Id, data.B_Id))); 

     var update = Update.Push("B.$.C", data.C.ToBsonDocument()); 
     collection.Update(query, update); 

Кажется работает;

Но как я могу сохранить/обновить следующие уровни?

Четвертый уровень я пытаюсь сохранить, как это:

 var query = Query.And(Query<A>.EQ(a => a.A_Id, data.A_Id), 
      Query<A>.ElemMatch(a => a.B, bb => bb.EQ(tt => tt.B_Id, data.B_Id)), 
      Query<B>.ElemMatch(b => b.C, c => c.EQ(wm => wm.C_Id, data.C_Id))); 
     var update = Update.Push("C.$.D", data.D.ToBsonDocument()); 
     collection.Update(query, update); 

Может быть кто-то может мне объяснить, как правильно писать запросы с использованием C# Driver. Или я слишком запутан и делаю все неправильно!

+0

Почему бы вам не использовать collection.Save? – i3arnon

+0

Причина Обновление сохранит или обновит модель. кроме того, он отлично работает на первых 3 уровнях. – noob

+0

сохранение также сохраняет или обновляет документ. – i3arnon

ответ

0

Работа, как это, но NJT правильно:

var query = Query.And(Query<A>.EQ(item => item.A_Id, data.A_Id), 
    Query<A>.ElemMatch<B>(t => t.B, t => t.EQ(tt => tt.B_Id, data.B_Id)), 
    Query<A>.ElemMatch<Wall>(t => t.B, t => t.ElemMatch<C>(tt => tt.C, tt => 
    tt.EQ(ttt => ttt.C_Id, data.C_Id)))); 

var update = Update.Push("B.0.C.$.D", data.D.ToBsonDocument()); 

collection.Update(query, update); 
Смежные вопросы