MongoDb и самоссылающиеся объекты - PullRequest
3 голосов
/ 12 ноября 2010

Я только начинаю узнавать о mongo db и мне было интересно, что я делаю что-то не так ... У меня есть два объекта:

public class Part 
{
    public Guid Id;
    public ILIst<Materials> Materials;
}

public class Material
{
   public Guid MaterialId;
   public Material ParentMaterial;
   public IList<Material> ChildMaterials;
   public string Name;
}

Когда я пытаюсь сохранить этот конкретный граф объектов, я получаюошибка переполнения стека из-за циклической ссылки.У меня вопрос, есть ли способ обойти это?В WCF я могу добавить атрибут «IsReference» в datacontract к true, и он отлично сериализуется.

Ответы [ 4 ]

1 голос
/ 09 января 2011

Просто для дальнейшего использования, такие вещи, как ссылки между объектами, которые не встроены в структуру поддокумента, чрезвычайно хорошо обрабатываются с помощью ODBC NoSQL, который обычно предназначен для работы с прозрачными отношениями в моделях сложных объектов произвольности.

Если вы знакомы с Hibernate, представьте себе, что без какого-либо файла сопоставления ВСЕ и на порядок быстрее производительность, потому что за кулисами нет времени выполнения JOIN, все отношения разрешаются со скоростью поиска b-дерева..

Вот видео от Versant (раскрытие - я работаю на них), так что вы можете увидеть, как оно работает.

Это немного скучно в начале, но показывает каждый шаг, чтобы взять приложение Java и сделать его постоянным в ODB ... затем сделать его отказоустойчивым, распределенным, выполнить несколько параллельных запросов, оптимизировать загрузку кэша и т. д. *

Если выЯ хочу перейти к интересной части, прыгнуть примерно на 20 минут, и вы избежите сборки приложения и просто увидите, как легко динамически развивать схему, добавить распределение и отказоустойчивость для любого существующего приложения):

1 голос
/ 12 ноября 2010

Какой драйвер вы используете?

В NoRM вы можете создать DbReference следующим образом:

public DbReference<Material> ParentMaterial;

Mongodb-csharp не предлагает строго типизированные DbReferences, но вы все равно можете их использовать.

public DBRef ParentMaterial;

Вы можете перейти по ссылке с Database.FollowReference(ParentMaterial).

0 голосов
/ 12 ноября 2010

Мне удалось выполнить именно то, что мне нужно, с помощью модифицированного драйвера из NoRM mongodb .

0 голосов
/ 12 ноября 2010

Если вы хотите хранить графы объектов со связями между ними, требующими нескольких «объединений», чтобы получить ответ, вам, вероятно, лучше использовать базу данных в стиле SQL. Документно-ориентированный подход MongoDB и других, вероятно, будет структурировать это несколько иначе.

Взгляните на вложенные множества MongoDB , которые предлагают несколько способов представления данных, подобных этой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...