【问题标题】:Mongoose Populate returns [Object] instead of resultMongoose Populate 返回 [Object] 而不是结果
【发布时间】:2019-05-29 10:04:42
【问题描述】:

我对 Mongoose 的 Population 方法有疑问。按照下面的结构

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,
});

我在两个表中都有一些条目。我正在尝试使用来自MongoosePopulation 来填充每个公司的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] ] } ]

如果我在没有填充的情况下这样做,我会得到仓库的 ID

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

如果我查询 CompanyWarehousespopulate company 字段,我得到的人口是正确的

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 }]

谁能解释一下我在这里缺少什么

乐:

我已经像这样定义了两个模型

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

【问题讨论】:

    标签: mongoose mongoose-populate


    【解决方案1】:

    这是由于console.log() 限制了它将显示的数据的深度。

    如果要查看docs的完整内容,可以将其记录为JSON:

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

    或者去掉深度限制:

    const { inspect } = require('util');
    
    ...
    
    console.log( inspect(docs, { depth : null }) );
    

    【讨论】:

    • 非常感谢。我在同一个应用程序中有一个更复杂的人口,有 2 个人口水平,我没有遇到任何 [对象] 问题,所以这就是为什么我不明白为什么它不起作用。实际上它正在工作,但没有按应有的方式显示。再次感谢
    【解决方案2】:

    我认为问题出在这里

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

    您将价值CompanyWarehouses 赋予ref

    尝试创建两个 Schema Constant 的实例,然后将该实例变量分配给 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);
    

    【讨论】:

    • 我已经定义了两个模型,请在帖子中查看我的 LE
    • @Sabbin 看我回答的最后两行,你不是在创建instance,你是直接把模型变量放到ref
    猜你喜欢
    • 2021-07-19
    • 1970-01-01
    • 2014-03-24
    • 1970-01-01
    • 2016-01-01
    • 2013-11-23
    • 2013-12-17
    • 2015-08-16
    相关资源
    最近更新 更多