Как использовать модель mon goose в другой модели? - PullRequest
0 голосов
/ 08 мая 2020

У меня две следующие модели. В модели пользователя я хочу использовать массив запросов, а в модели запроса я хочу использовать пользователя в качестве атрибута (без пароля). Как мне это сделать?

var userSchema = new Schema({
  cartaoCidadao: {
    type: String,
    required: true,
    index: {
      unique: true,
    },
    match: /[0-9]{8}/,
  },
  password: { type: String, required: true },
  role: { type: String },

  estado: { type: String, enum: ["Infetado", "Suspeito"] },
});

var requestSchema = new Schema({
  encaminhado: { type: String },
  pessoaRisco: { type: String },
  trabalhoRisco: { type: String },
  estadoPedido: { type: String },
  resultado: { type: String },
});

Ответы [ 3 ]

1 голос
/ 08 мая 2020

Вы можете использовать схему, которую вы определили как тип:

var userSchema = new Schema({
    // ...
    requests: {
        type: [requestSchema] // this property type is: array of requests
    }
    // ...
});

Если обе модели хранятся в базе данных, и вы, вероятно, захотите go для их связи. Вы можете ссылаться на одну модель из другой. (см. ответ Мухаммада Лахина)

Затем вы запрашиваете свою родительскую модель и связываете с ней дочерние модели (https://mongoosejs.com/docs/populate.html)

А вот пример как можно исключить некоторые поля во время заполнения: https://mongoosejs.com/docs/populate.html#query -условия

Это будет примерно так:

User.
  find(/* some query */).
  populate({
    path: 'requests',
    select: 'fieldToSelect1 fieldToSelect2' // You can control which fields to include
  }).
  exec();
0 голосов
/ 08 мая 2020

можно сделать что-то вроде этого

var userSchema = new Schema({
    requests: [
        {
            type: Schema.Types.ObjectId,
            ref: "Request",
        }
    ]
});

var requestSchema = new Schema({
    user: {
        type: Schema.Types.ObjectId,
        ref: "User"
    }
})
0 голосов
/ 08 мая 2020

, вы можете установить тип пользователя в модели запроса следующим образом заполнить, вы также можете опустить пароль

теперь, если вы видите базу данных mondodb в базе данных запроса, весь объект пользователя не сохраняется, и сохраняется только user_id, поэтому у вас нет доступа к пользователю. вам нужно отправить еще один запрос, чтобы получить данные пользователя из предоставленного user_id, что не очень хорошо. решение заключается в том, что вы устанавливаете схему, как я сказал, и когда вы отправляете ответ, который содержит данные запроса, используйте заполнение для добавления пользовательских данных в ответ

res.json({request: requests.find(//options to find a specified request).populate('users','name')})

первый аргумент - это модель, которая является пользователями а второй аргумент - это желаемое поле модели пользователей, например, это вернет имя пользователя. вы можете добавить дополнительные аргументы, чтобы добавить их все, кроме пароля

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