Ссылка на несколько иностранных документов с MongoDBRef в MongoDB - PullRequest
2 голосов
/ 28 октября 2011

Я столкнулся с ситуацией, когда было бы лучше представить определенную часть моей доменной модели как реляционную.Я прочитал раздел ссылки на базу данных в MongoDB и понимаю, что вы можете предоставить ссылки на несколько документов, предоставив JSON-массив ссылок $ ref на различные документы в чужой коллекции.

Все примерыЯ видел для добавления ссылки на иностранный документ в коде были только для одного документа, и они создали открытое свойство типа MongoDBRef.На мой взгляд, при таком подходе есть много ненужных накладных расходов, но он также не проясняет, что делать с хранением ссылок на несколько документов.

Если вы хотите предоставить однозначный-Много отношения между иностранными документами в Mongo, необходимо ли предоставлять свойство коллекции, содержащее объекты MongoDBRef?Можно ли придерживаться коллекции стандартных объектов сущностей в моем коде C # и сопоставлять ее с документами Mongo, используя BsonClassMap?

Ниже приведен простой класс, представляющий модель, которая у меня есть в настоящее время.Кажется, что он правильно сохраняет документ и ссылки, но мне не нравится выставлять открытую коллекцию объектов MongoDBRef и накладные расходы, необходимые для добавления новых документов для всех, кто использует класс Person.

Если это имеет значениеЯ использую MongoDB 2.0 и их драйвер C #.

// This is how my class currently looks
public class Person
{
    public string Name { get; set; }
    public List<MongoDBRef> Vehicles { get; private set; }

    public Person()
    {
        Vehicles = new List<MongoDBRef>();
    }
}

// This is what I want my class to look like
public class Person
{
    public string Name { get; set; }
    public List<Vehicle> Vehicles { get; private set; }

    public Person()
    {
        Vehicles = new List<Vehicle>();
    }
}

1 Ответ

3 голосов
/ 28 октября 2011

DBRef не подходят для хранения ссылок на известный тип документа.Вместо этого просто сохраните значения _id упомянутых документов в вашей коллекции.Имея хорошую библиотеку отображений (не уверенную в C #, но в C # эквиваленте pymongo, mongoose, morphia и т. Д.), Она позволит вам делать именно то, что вы хотите.

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

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