MongoDB: заполнить или запросить две коллекции - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть следующие схемы:

let ProjectSchema = new mongoose.Schema({
  title: {
    type: String
  },
  employees: {
    user: String, // ==> ObjectId of User from UserSchema
    role: String,
    workload: Number,
  },
  description: {
    type: String
  }
});

let UserSchema = new mongoose.Schema({
  email: {
    type: String,
    required: true,
    trim: true
  },
  name: {
    type: String
  },
  projects: {
    type: Array // ==> ObjectId of Project from ProjectSchema
  }
});

Я хочу добиться того, чтобы пользователь получил _id или email, а также все данные из его проектов, например:

{
    "user": {
        "_id": "asdf1234",
        "email": "your@email.com",
        "name": "Max"
        "projects": {
            "title": "Project 1",
            "description": "Just a text",
            "employees": {
                "user": "asdf1234",
                "role": "developer",
                "workload": 40
            }
        }
    }
}

И я также хочу получить конкретный проект по идентификатору, и поле employee.user должно быть заполнено правильными пользовательскими данными.

Могу ли я сделать это с Mongoose populate?Мой подход заключается в том, чтобы сначала сделать User.findOne(), а затем проверить project.id и Project.findOne().

1 Ответ

0 голосов
/ 13 февраля 2019

как в вашей UserSchema вы ссылаетесь на массив проектов, таким образом, когда вы запрашиваете пользователя, вы запрашиваете все проекты, связанные с пользователем.

let mongoose = require("mongoose");
let Projects = require("./projects");
let UserSchema = new mongoose.Schema({
  email: {
    type: String,
    required: true,
    trim: true
  },
  name: {
    type: String
  },
  projects: {
    type: [Projects.schema]
  }
});

Затем каждый раз, когда вы запрашиваетепользователь приходит с проектами, связанными с пользователем.

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