как добавить новое поле в mongodb, если я использую драйверы norm или csharp-mongodb - PullRequest
2 голосов
/ 05 декабря 2010

У меня есть два проекта, основанные на базе данных mongodb. В одном проекте используется csharp-mongodb, а в другом - драйвер нормы.

Я делаю запрос к моей БД только с помощью универсальных методов, таких как GetCollection. Как я могу добавить новое поле к моей сущности с меньшими затратами?

Например, В начале у меня есть

public class MyEntity 
{
     public int _id {get;set;}
     public string Firstname {get;set;}
}

через несколько дней я решил добавить новое поле

public class MyEntity 
{
     public int _id {get;set;}
     public string Firstname {get;set;}
     public string Lastname {get;set;} //here is
}

Я вижу только один способ - создать утилиту, которая получает мою сущность, затем десериализует ее, преобразует в новый тип и затем сериализует в bson. Что касается меня - это трудный путь - при том понимании, что у меня более 1 миллиона записей.

Я знаю, что у драйвера csharp mongodb есть возможность работать с документами:)

Ответы [ 2 ]

1 голос
/ 06 декабря 2010

Если вы используете драйвер Norm, вновь добавленные поля автоматически обновляются при вставке и извлечении.Вам не нужно выполнять десериализацию вручную.

при повторном получении новое поле «Фамилия» будет возвращено как ноль для старых документов.После вставки это новое поле будет добавлено в документ.

0 голосов
/ 05 декабря 2010

@ Антоний, нужно ли обновлять все записи, когда вы получаете новое поле?Попробуйте выбрать ленивое обновление - обновите каждую старую запись в запросе.Но все записи нового стиля будут иметь все поля записи.

Мне нравится samus driver .Конечно, это работает с документами BSON, но когда вы хотите обновить какую-либо запись, MongoDB возвращает полный документ BSON, а не часть.Я новичок в MongoDB, но, как я понимаю, MongoDB не может вернуть какую-то часть документа.Он работает как ваша утилита: get -> deserialize -> update -> serialize -> save;Я не думаю, что это трудный путь, когда мы говорим о записях 1M-10M;)

...