2010-12-05 3 views
2

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

Я делаю запрос к моему db только с помощью общих методов, таких как 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 имеет возможность работать с documnets :)

ответ

1

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

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

+0

спасибо, за ваш ответ. –

0

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

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

+0

MongoDB может вернуть часть некоторых объектов здесь ссылка: http://www.mongodb.org/display/DOCS/Retrieving+a+Subset+of+Fields я не знаю, как это было реализовано в CSharp -mongodb (мне не нужно выполнять эту операцию в моем приложении). Моя проблема: у меня около 100 000 записей с типом MyEntity, затем я добавляю новое поле в класс, тогда я не могу десериализовать старый тип для моего нового типа (ошибка времени выполнения). Я думаю, что это будет здорово, если драйвер mongo может инициализировать это значение со значением по умолчанию, то есть значением по умолчанию (T) –

+0

@Antony, приятные подробности о подмножествах полей;) – Edward83

+0

@ Антони, если вы зададите свой вопрос здесь http://groups.google.com/group/mongodb-csharp, пожалуйста, дайте ссылку;) – Edward83

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