Mongoose не возвращает все поля в документе с помощью простого find () - PullRequest
0 голосов
/ 02 июля 2018

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

let User = new Schema({
  email: {
    type: String,
    required: true
  },
  password: {
    type: String,
    required: true
  },
  firstName: {
    type: String,
    required: false
  },
  lastName: {
    type: String,
    required: false
  },
  templates: {
    type: Schema.Types.ObjectId,
    ref: 'TemplateInstance',
    required: false
  }
},{
  collection: 'users',
  timestamps: true
});

И следующий код Mongoose:

exports.getUsers = (req, res) => {
  User.find((err, users) => {
    if(err)
      return res.status(400).json( { 'users_get_all': 'failure', 'err': err } );
    return res.status(200).json( { 'users_get_all': 'success', 'users': users } );
  });
};

Изначально у каждого пользовательского Документа нет ничего в поле «шаблоны», потому что после того, как пользователь создает свою учетную запись, именно тогда он получает возможность присоединить к ней шаблоны. Я вручную добавил несколько шаблонов ObjectID в поле 'templates' некоторых пользователей, но когда я запускаю функцию getUsers (), пользовательские документы возвращаются, но без поля 'templates':

{"users_get_all":"success","users":[{"_id":"5b39f9da294d041b58f97cb3","email":"testemail@email.com","password":"password","firstName":"firstName","lastName":"lastName","createdAt":"2018-07-02T10:09:30.400Z","updatedAt":"2018-07-02T10:21:34.579Z","__v":0},{"_id":"5b39ff5723d93c17bc00eabf","email":"testemail2@email.com","password":"password","firstName":"firstName2","lastName":"lastName2","createdAt":"2018-07-02T10:32:55.308Z","updatedAt":"2018-07-02T10:32:55.308Z","__v":0}]}

Если я посмотрю на MongoDB в чем-то похожем на Studio 3T, массив шаблонов определенно содержит ObjectID, которые ссылаются на шаблоны в коллекции Template.

Screenshot of Studio 3T showing Users collection

Есть идеи, почему поле 'templates' не возвращается?

1 Ответ

0 голосов
/ 02 июля 2018

Обновите вашу схему следующим образом:

let User = new Schema({
  email: {
    type: String,
    required: true
  },
  password: {
    type: String,
    required: true
  },
  firstName: {
    type: String,
    required: false
  },
  lastName: {
    type: String,
    required: false
  },
  templates: [{
    type: Schema.Types.ObjectId,
    ref: 'TemplateInstance',
    required: false
  }]
},{
  collection: 'users',
  timestamps: true
});

Как и в базе данных, у вас есть шаблоны в массиве, и вы объявили его объектом в схеме.

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