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

#node.js #mongodb #mongoose

#node.js #mongodb #mongoose

Вопрос:

Я создаю API для хранения практики, которая содержит рабочие записи. Когда я получаю свою практику, я получаю массив рабочих записей, но он включает только идентификатор и созданные / обновленные свойства при

Это моя схема workpost

 'use strict';

// Requirements
const mongoose = require('mongoose');

// Workpost Schema
const WorkpostSchema = new mongoose.Schema({
  workpost_name: { type: String},
  workpost_icon: { type: String},
  workpost_info: { type: String},
  created_at: {type: Date, default: Date.now},
  updated_at: {type: Date, default: Date.now},
},{versionKey: false});

// Export the Workpost schema
let Workpost = mongoose.model('Workpost', WorkpostSchema);

module.exports.WorkpostSchema =  WorkpostSchema;
module.exports.Workpost = Workpost;
  

Это практическая схема, которая его использует

 'use strict';

// Requirements
const mongoose = require('mongoose');
const WorkScheduleSchema = require('./workschedule-module').WorkScheduleSchema;
const WorkpostSchema = require('./workpost-module').WorkpostSchema;

// Practice Schema
const PracticeSchema = new mongoose.Schema({
  practice_name: {type: String, required: true},
  address: String,
  email: String,
  tel: String,
  workschedules: [WorkScheduleSchema],
  workposts: [WorkpostSchema],
  created_at: {type: Date, default: Date.now},
  updated_at: {type: Date, default: Date.now},
},{versionKey: false});

// Export the Practice schema
let Practice = mongoose.model('Practice', PracticeSchema);

module.exports.Practice = Practice;
  

Когда я пытаюсь получить практику, я получаю это:

 address: "Some adress"
created_at: "2019-03-25T12:42:05.288Z"
email: "email@email.com"
practice_name: "Some practice"
tel: "00000473975832"
updated_at: "2019-03-25T12:42:05.288Z"
workposts: Array(2)
0:
created_at: "2019-03-25T12:42:05.291Z"
updated_at: "2019-03-25T12:42:05.291Z"
_id: "5c94f6eb1a0a6200128461d2"
__proto__: Object
1:
created_at: "2019-03-25T12:42:05.290Z"
updated_at: "2019-03-25T12:42:05.290Z"
_id: "5c94f7121a0a6200128461d3"
  

Ни один из других атрибутов не включен в возврат. Я практикую использование следующего кода и возвращаю его простым запросом get

 router.post('/', (req, res, next) => {
WorkPosts.find({_id: {$in: req.body.workposts}}, {_id:1}).exec( function (err, workposts) {
      if (err) {
        err.message = "Workposts not found";
        return next(err);
      }
      let practice = new Practice(req.body);
      practice.workschedules = workschedules;
      practice.workposts = workposts;

      practice.save((err, practice) => {
        if (err) {
          err.message = "Practice couldn't be saved";
          return next(err);
        }
        res.statusCode = 201;
        res.json(practice);
      });
    });
});
  

Комментарии:

1. Что вы имеете в виду, говоря «Ни один из других атрибутов не включен в возврат»? Единственное отсутствующее поле в выходных данных — workschedules . Кстати: `практика. workschedules = рабочие расписания; ` откуда это берется? Глобальная переменная?

2. Он поступает из другой схемы. Но это работает так же, как workposts

3. Поскольку вы ссылаетесь на ObjectId (workschedules) и, похоже, используете mongoose, вы пробовали использовать populate ? Поскольку вы делаете GET, so populate, похоже, полезен для этого случая!