Моделирование данных о соединении «многие ко многим» в Монго? - PullRequest
2 голосов
/ 15 марта 2012

Таким образом, в реляционной БД у меня может быть 2 таблицы: «Пользователь» и «Событие», которые имеют отношение «многие ко многим», и, таким образом, объединяющая таблица «Пользователи» говорит. Теперь у меня есть некоторые данные, которые я хочу сохранить в этой таблице, кроме двух идентификаторов, что-то вроде логического значения «Enjoyed».

Я понимаю, что в Mongo вы бы создали встроенные ссылки между таблицами, например используя Mongoose

var Person = new Schema({
    email: String,
    events: [EventFeedback]
})

var Event = new Schema({ ... });

var EventFeedback = new Schema({
    person: Schema.ObjectId,
    event: Schema.ObjectId,
    enjoyed: Boolean
});

но действительно ли это лучший способ смоделировать это? Я бы подумал, что все в EventFeedback может быть в Person.events, который будет проиндексирован Event._id? Или, может быть, это всего лишь ограничение Мангуста?

Ответы [ 2 ]

2 голосов
/ 08 мая 2013

Попробуйте вот так

var EventScheme = new Schema({ ... });  
mongoose.model('Event', EventScheme);

var PersonScheme = new Schema({
  email: String,
  events: [{
    event: {
      type: mongoose.Schema.ObjectId,
      ref: 'Event'
    },
    enjoyed: Boolean
  }]
});
1 голос
/ 15 марта 2012

Вам лучше использовать встроенный документ, а не ссылку.

var Person = { 
   email: "joe.user@users.mongodb.org",
   events: [ 
        {code: "MONGONY2012", name: "Mongo NY", date: "5/23/2012", link: "http://www.10gen.com/events/mongo-nyc", enjoyed: true}, 
        {code: "MONGOPHL2012", name: "Mongo Philly", date: "4/9/2012", link: "http://www.10gen.com/events/mongodb-philly", enjoyed: true}
   ]
}

Вы можете легко запросить у Mongo событие, используя точечную запись:

db.people.find({"events.code": "MONGONY2012"})

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