2014-01-22 2 views
1

У меня есть необходимость обновить поддокумент в Mongo, и именно так я это сделал. Этот снимок экрана показывает, как выглядят мои документы. И приведенный ниже код показывает, как я обновляю имя и инструмент Гедди.Есть ли строго типизированный способ обновления поддокумента в MongoDB?

enter image description here

Примечание: Этот подход был взят из this SO post:

var update = Update.Set("Members.$.Instrument", "Keyboards").Set("Members.$.LastName", "Leex"); 

var collection = MongoDbHelper.Db.GetCollection<Band>("Bands"); 
collection.Update(Query.And(Query.EQ("Name", "Rush"), Query.EQ("Members.FirstName", "Geddy")), update); 

Есть еще/лучший способ сделать это, что делает использование строго типизированных свойств вместо всех этих строковых литералов ?

ответ

2

В настоящее время нет поддержки для написания запросов или обновлений, подобных этому (например, запрос на отдельные подполя массивов и использование «$» в обновлении) с использованием типизированных сборщиков.

Трудность возникает с выражениями, которые компилируются без ошибок и все же правильно выражают желаемое намерение.

Например, следующее может быть работоспособной конструкции, но с использованием -1 в качестве значения индекса является своего рода Hacky:

var query = Query.And(
    Query<Band>.EQ(b => b.Name == "Rush"), 
    Query<Band>.EQ(b => b.Members[-1].FirstName == "Geddy")); 
var update = Update<Band> 
    .Set(b => b.Members[-1].Instrument, "Keyboards") 
    .Set(b => b.Members[-1].LastName, "Leex"); 

Примечание: это только возможный дизайн для поддержки «$» в машинке строители. На самом деле это не реализовано.

Если у вас есть идеи относительно того, как можно было бы выразить безопасную версию типа, вы должны создать билет JIRA, предлагающий эту функцию.

+0

Что означает -1? Это то же самое, что $? –

+0

Я попробовал это и получил две ошибки компиляции: 'Нет перегрузки для метода 'EQ' принимает 1 аргументы' и' Невозможно применить индексирование с [] к выражению типа 'System.Collections.Generic.IEnumerable '' –

+0

-1 - это всего лишь пример одного * возможного * способа выражения запросов и обновлений с использованием« $ ». Это фактически не реализовано. –

Смежные вопросы