authoris
@authoris
Основал небольшую Курскую студию

Как в Sails.js сделать Many to Many связь, чтобы в MongoDB не создавалась отдельная коллекция?

Добрый день. Проблема в том, что при создании связей многие ко многим стандартным способом, Waterline создает в MongoDB новую коллекцию, вместо того, чтобы создать в документах массивы с идентификаторами, указывающими на конкретные документы из связанных коллекций, что на мой взгляд немного противоречит концепции монги. Прочитал документацию по Waterline, и не нашел способов создания связей без лишней коллекции. Может кто-то сталкивался с подобной проблемой? Не хочется делать из монги подобие реляционной базы.

Пример как хочется

//Документ в коллекции Pet
{
    "_id": "5507168dc2bf59812137d80c",
    "name": "Hugin",
    "owners": ["550715ccc2bf59812137d806", "550715f8c2bf59812137d807"]
}

//Документы в коллекции Human
[{
    "_id": "550715ccc2bf59812137d806",
    "name": "Karry",
    "pets": ["5507168dc2bf59812137d80c"]
},
{
    "_id": "550715f8c2bf59812137d807",
    "name": "Stephen",
    "pets": ["5507168dc2bf59812137d80c", "5507168dc2bf59812137d80d"]
}]


Waterline же, создает для связей дополнительную коллекцию c документами вида:

{
  "_id": "5507168dc2bf59812137d80e",
  "humans_pets": "550715f8c2bf59812137d807",
  "pets_humans": "5507168dc2bf59812137d80c"
}
  • Вопрос задан
  • 644 просмотра
Решения вопроса 1
authoris
@authoris Автор вопроса
Основал небольшую Курскую студию
@particlebanana: Right now waterline-schema builds a relational schema for your models. Adapters that can handle schemaless data can be updated to transform queries and criteria to use this sort of data structure.

Currently the mongo adapter doesn't do this and will store data in a "join table" just like mysql or postgresql. I'd happily accept a PR to fix this for mongo though. I started on it a while back but didn't have the time to get very far with it, should be in the commit history though.


Ответ нашелся на GitHub. Видимо пока — никак, не смотря на то, что комментарий датирован февралем 2014-го, работы далеко не продвинулись, и адаптер для монги до сих пор работает так, словно он MySQL или PostgreSQL.

Вольный перевод комментария:
На данный момент Waterline строит реляционные связи для ваших моделей. Адаптеры могут изменять информацию о схемах для преобразования запросов и критериев для работы с собственной структурой.

В настоящее время, адаптер монги этого не делает и хранит данные в «промежуточной таблице», как, например MySQL или PostgreSQL. Я бы с радостью принял Pull Request что бы исправить это для монги. Некоторое время назад, я начал работу над ним, но не было времени, что бы достаточно продвинуться в указанном направлении. Должно быть где-то в истории коммитов.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
keksmen
@keksmen
Just a programmer
Реляционная модель изначально не рассчитана на many-to-many связи, так что без отдельной таблицы тут не обойтись, увы.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы