Решение для отображения объектов - PullRequest
1 голос
/ 26 февраля 2012

У меня есть эта структура базы данных SQL. пользователи таблица, объекты таблица и таблица сопоставления users_objects_map для назначения объектов учетной записи пользователя.

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

<b>users</b>
id
firstname
lastname
...

<b>objects</b>
id
...

<b>users_objects_map</b>
user_id
object_id

Каков наилучший способ создать это с MongoDB?

Моей первой идеей было добавить массив для пользователей, в котором все идентификаторыиз присвоенных объектов будут сохранены.

{"firstname":"John", "lastname": "Doe", "object_ids":["id","id2",...,"id-n"]}

Но что, если пользователю назначены тысячи объектов?Я не думаю, что это хорошее решение.И как я могу выбрать всех пользователей, назначенных объекту, или все объекты, назначенные пользователю?

Есть ли какое-нибудь умное решение MongoDB для моей проблемы?

1 Ответ

0 голосов
/ 27 февраля 2012

Использование идентификаторов объектов в BsonArrays в качестве ссылки на объекты - отличный способ, а также рассмотрите возможность использования BsonDocuments в пределах «object_ids» самого пользователя, тогда вы сможете легче масштабировать его и использовать «_id» (ObjectID), чтобы MongoDB индексировал эти идентификаторы, это повысит производительность.

В конечном итоге у вас будет 2 коллекции, одна с пользователями, а другая с объектами:

user:
{
    "_id" : "user_id",
    "firstname" : "John",
    "lastname" : "Doe",
    "object_ids" : [
        { "_id" : "26548" , "futurefield" : "futurevalue" },
        { "_id" : "26564" , "futurefield" : "futurevalue" } 
    ]
}

В настоящий момент я действительно не знаю, какие это будут объекты ... но могу привести пример:

workshop object:
{
    "_id>" : "user_id",
    "name" : "C# for Advanced Users",
    "level" : "300",
    "location" : "Amsterdam, The Netherlands",
    "date" : "2013-05-08T15:00:00"
}

Теперь самое интересное, и это вопрос. Я занимаюсь разработкой на C # и использую драйвер с mongodb.org.

Пример: Дайте мне всех, у кого есть объект id == "26564".

var query = from user in userCollection.Find(Query.EQ("objects_ids._id","26564"))
            select user;

Этот запрос вернет документы, в данном случае это пользователи, которые соответствуют идентификатору. Если у вас есть диапазон значений, пожалуйста, используйте: Query.All ("name", "BsonArray Values");

Второй запрос - найти и / или сопоставить идентификаторы идентификаторов объектов, которые могут содержать BsonDocuments.

var secondQuery = 
  from workshops in objectsCollection.Find(Query.EQ("_id", "userid"))
  select cust["object_ids"].AsBsonArray.ToArray();

Я надеюсь, что помог вам таким образом.

Удачи с этим!

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