Mongoose Populate возвращает [Object] вместо результата - PullRequest
0 голосов
/ 02 января 2019

У меня проблема с методом Population от Mongoose.Следуя структуре ниже

const CompanySchema = new Schema({
  name: String,
  logo: String,
  description: String,
  address: String,
  website: String,
  phone: String,
  email: String,
  warehouses: [{ type: Schema.Types.ObjectId, ref: 'CompanyWarehouses' }],
});

const CompanyWarehouses = new Schema({
  company: { type: Schema.Types.ObjectId, ref: 'Company' },
  city: String,
});

У меня есть несколько записей в обеих таблицах.Я пытаюсь использовать Population из Mongoose для заполнения поля warehouses для каждой компании.

Используя следующий запрос

Company.find({}, 'warehouses -_id')
  .populate({
    path: 'warehouses',
  })
  .exec((err, docs) => {
     console.log(docs);
  }); 

, я получаю следующие результаты

[ { warehouses: [ [Object], [Object], [Object] ] },
  { warehouses: [ [Object], [Object] ] },
  { warehouses: [ [Object], [Object] ] },
  { warehouses: [ [Object] ] },
  { warehouses: [] },
  { warehouses: [ [Object] ] } ]

Если я сделаю это без заполнения, я получу идентификаторы складов

[ { warehouses: 
     [ 5c2765e86351ec4f1e219d6b,
       5c2765e86351ec4f1e219d6c,
       5c2765e86351ec4f1e219d6d ] },
  { warehouses: [ 5c2773596351ec4f1e219d77, 5c2773596351ec4f1e219d78 ] },
  { warehouses: [ 5c277c766351ec4f1e219d82, 5c277c766351ec4f1e219d83 ] },
  { warehouses: [ 5c27843c6351ec4f1e219d90 ] },
  { warehouses: [] },
  { warehouses: [ 5c279b8ecebdea072f0bacd5 ] } ]

Если я запросю CompanyWarehouses и populate company поданного Iполучить правильное население

CompanyWarehouses.find()
    .populate('company')
    .exec((err, docs) => {
      console.log(docs);
    });

[ { _id: 5c279b8ecebdea072f0bacd5,
    company: 
     { warehouses: [Array],
       _id: 5c279b3acebdea072f0baccc,
       name: 'sadsa',
       phone: '2323',
       email: 'sss@ss.ss',
       city: 'dsadsadsa',
       address: 'sadadsa',
       logo: 'logo.png' },
    city: 'ssdsa',
    __v: 0 }]

Может кто-нибудь объяснить, что мне здесь не хватает

LE:

Я определил обе модели следующим образом

module.exports = mongoose.model('Company', CompanySchema);
module.exports = mongoose.model('CompanyWarehouses', CompanyWarehouses);

Ответы [ 2 ]

0 голосов
/ 02 января 2019

Это вызвано console.log() ограничением глубины отображаемых данных.

Если вы хотите увидеть полное содержимое docs, вы можете зарегистрировать его как JSON:

console.log('%j', docs);

Или убрать ограничение по глубине:

const { inspect } = require('util');

...

console.log( inspect(docs, { depth : null }) );
0 голосов
/ 02 января 2019

Я думаю, что проблема здесь

warehouses: [{ type: Schema.Types.ObjectId, ref: 'CompanyWarehouses' }]

вы даете значение CompanyWarehouses ref

Попробуйте создать экземпляр обеих констант схемы, затем присвойте эту переменную экземпляру ref

    const CompanySchema = new Schema({
      ...,
      warehouses: [{ type: Schema.Types.ObjectId, ref: 'companywarehouses' }],
    });

    const CompanyWarehouses = new Schema({
      company: { type: Schema.Types.ObjectId, ref: 'company' },
      ...
    });


   // instance of both Model
    const CompanySch = mongoose.model('company', CompanySchema);
    const WareHousesSch = mongoose.model('companywarehouses', CompanyWarehouses);
...