首页 文章

Mongoose填充返回空数组

提问于
浏览
0

我试图使用mongoose populate函数,但作为回应我得到空数组,我已经看到有关此的多个帖子

var MerchantSchema = new mongoose.Schema({
  packages: [{ $type: mongoose.Schema.Types.ObjectId, ref: 'Package'}]
},
{
    typeKey: '$type',
    timestamps: { createdAt: 'created_at', updatedAt: 'updated_at'}
});

module.exports = mongoose.model('Merchant', MerchantSchema);

这是我对基本模型的模式定义 .

var mongoose = require('mongoose');

var PackageSchema = new mongoose.Schema({
    merchant_id: { type: mongoose.Schema.Types.ObjectId, ref: 'Merchant' },
    name: String,
    original_price: Number,
    discounted_price: Number
});

module.exports = mongoose.model('Package', PackageSchema);

这就是我所说的模型 . Package模型和Merchant模型中的数据正在保存得很好 .

Merchant document

Package document

但是,如果我使用populate函数进行查询,则返回一个空字符串

Merchant
.findById( req.params.id, 'packages')
.populate('packages')
.exec(function (err, merchant) {
    if (err)
        next(err);
    else
        res.status(200).json(merchant);
});

输出:

{
  "_id": "579b3b2dc2e8d61c0ecd2731",
  "packages": []
}

谁能帮我

更新:

好的事情真的很奇怪 . 如果我尝试使用_965710填充Package文档,它可以正常工作,但不是相反 .

Package
    .find()
    .populate('merchant_id')
    .exec(function (err, packages) {
        if(err)
            next(err);
        else
            res.status(200).json(packages);
    });

输出:

[
  {
    "_id": "579b3b51c2e8d61c0ecd2732",
    "name": "Hair + Nails",
    "original_price": 600,
    "discounted_price": 400,
    "merchant_id": {
      "_id": "579b3b2dc2e8d61c0ecd2731",
      "updated_at": "2016-07-29T11:17:37.474Z",
      "created_at": "2016-07-29T11:17:01.216Z",
      "name": "VLCC",
      "logo_image": "http://vlccwellness.com/India/wp-content/uploads/2015/09/logo1.png?",
      "cover_image": "http://image3.mouthshut.com/images/imagesp/925053993s.jpg?",
      "__v": 1,
      "tags": [],
      "packages": [
        "579b3b51c2e8d61c0ecd2732"
      ],
      "work_hours": {
        "opening_time": 1000,
        "closing_time": 2100,
        "holiday": "Sunday"
      },
      "information": {
        "description": "Lorem Ipsum",
        "gender": "Men",
        "services": [
          "Hair"
        ],

4 回答

  • 0

    好吧,因为你的 Schema 上的 packages 字段是一个数组,你也应该将它填充为一个数组 .

    尝试

    .populate([
        {path:'packages', model:Package}
    ])
    

    wher Package 是您的包模型的实例 .

  • 1

    确保Merchant架构中的packages数组包含String类型的ObjectIds(不是数字) . 您可以通过以下方式确保:

    merchant.packages.map(r => { r._id = r._id + ''; });
    
  • 0

    您可以尝试从 findBbyId 中删除第二个参数:

    Merchant
    .findById( req.params.id)
    .populate('packages')
    .exec(function (err, merchant) {
        if (err)
            next(err);
        else
            res.status(200).json(merchant);
    });
    
  • 0

    在MerchantSchema中使用$ type类型 .

    var MerchantSchema = new mongoose.Schema({
      packages: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Package'}]
    },
    {
        typeKey: '$type',
        timestamps: { createdAt: 'created_at', updatedAt: 'updated_at'}
    });
    
    module.exports = mongoose.model('Merchant', MerchantSchema);
    

    验证Merchant文档中是否存在针对包的ObjectId数组 .

相关问题