Запрос Mongoose / mongoDB … но я пришел из sql-фона

Я исхожу из sql-фона, поэтому запись запросов в sql, где я присоединяюсь к таблицам, довольно проста, но я думаю, что мне не хватает этого в mongoose / mongodb

В основном я знаю Subscriber_ID (который сопоставляется с документом в пользовательской коллекции)

Я хочу вытащить группу проектов со всеми проектами, к которым принадлежит пользователь, поэтому, если бы я написал это в pseduo sql, это было бы похоже на

Select ProjectGroup.title, Project.Title FROM ProjectGroup, Project, User WHERE User.id = req.body.subscriber_id AND Project.subscriber_id = User.id AND ProjectGroup.project_id = Project.id 

Должен быть способ сделать похожие соединения в mongoose / mongodb, потому что тип сопоставляет правилу схемы?

Мои схемы …..

Схема проектной группы

 var ProjectGroupSchema = new Schema({ title : String , projects : [ { type: Schema.Types.ObjectId, ref: 'Project' } ] }); 

Схема проекта

 var ProjectSchema = new Schema({ title : {type : String, default : '', required : true} , subscribers : [{ type: Schema.Types.ObjectId, ref: 'User' }] }); 

Пользовательская схема

 var UserSchema = new Schema({ first_name : {type: String, required: true} , last_name : {type: String, required: true} }); 

Спасибо!

2 Solutions collect form web for “Запрос Mongoose / mongoDB … но я пришел из sql-фона”

Вы всего в одном шаге!

Схема проектной группы:

 var ProjectGroupSchema = new Schema({ title : String }); 

Схема проекта:

 var ProjectSchema = new Schema({ title : {type : String, default : '', required : true}, group : {type: Schema.Types.ObjectId, ref: 'ProjectGroup' }, _users : [{type: Schema.Types.ObjectId, ref: 'User' }] }); 

Пользовательская схема:

 var UserSchema = new Schema({ first_name : {type: String, required: true}, last_name : {type: String, required: true}, subscribing : [{type: Schema.Types.ObjectId, ref: 'Project' }] }); 

Затем вы можете сделать следующее:

 user.findById(req.userId) .populate('subscribing') .exec(function(err, user){ console.log(user.subscribing); }) 

Или:

 project.find({ subscriber : req.userId }) .populate('subscriber') .populate('group') .exec(function(err, projects){ console.log(projects); }) 

В Мондомбе нет объединений. Этот вопрос, на мой взгляд, является хорошей ссылкой:

MongoDB и “присоединяется”

Подводя итог, должны быть приняты различные страtagsи с mongodb для проблем, которые будут решаться с помощью объединений в реляционных БД. Я бы сказал, что вы в основном делаете одну из этих двух вещей:

  • Встраивание: вы размещаете информацию в одном документе, который в реляционной БД должен быть распределен между разными таблицами.
  • Объединение информации на стороне клиента: когда вам нужно использовать информацию из нескольких мест, вы запрашиваете много раз, а затем складываете fragmentы в своем клиенте.
  • Обратный звонок в nodejs?
  • Использование Express и узла, как поддерживать сеанс по субдоменам / хост-узлам
  • Разрешить запрос CORS REST в приложение Express / Node.js на Heroku
  • Как защитить поле пароля в Mongoose / MongoDB, чтобы он не возвращался в запрос при заполнении коллекций?
  • Маршрутизация Express.js: необязательный параметр с плавающей запятой?
  • Облачные функции Firebase очень медленные
  • Как вы извлекаете данные POST в Node.js?
  • NodeJS требует глобального модуля / пакета
  • Express-js не может получить мои статические файлы, почему?
  • Model.find (). ToArray () утверждает, что не имеет метода .toArray ()
  • Использование Node.js только против использования Node.js с Apache / Nginx
  • Interesting Posts
    Давайте будем гением компьютера.