填充不起作用,不填充代码即可工作

时间:2018-09-14 09:40:43

标签: mongoose populate

我在填充模式字段时遇到问题,我尝试了无数次,但无法找出问题所在: 功能:

 function xyz (req, res) {
    User.findOne({_id: req.payload._id })
        .populate("ABC.xyzID")
        .exec((err, user) => {
        if (err) {
            return res.json ({'success': false, 'message': 'Could not retrieve ABC.'});
        }
        console.log(user);
        return res.json ({'success': true, 'message': 'ABC fetched successfully', user });
    });

}

模式:

const UserSchema = new mongoose.Schema({
    name:{
        type: String,
        required: true,
        trim: true
    },
ABC:{
        xyzID:{
            type: mongoose.Schema.Types.ObjectId,
            ref: 'xyz'
        },
},
LMN:{
          yyyID:[{
            type: mongoose.Schema.Types.ObjectId,
            ref: 'yyy'      
        }], 
         EmployeeID:[{
            type: mongoose.Schema.Types.ObjectId,
            ref: 'User'            
        }]
    }

});

在这里我可以通过填充它来访问:LMN.yyyID,但它不适用于ABC.xyzID,没有填充,我可以看到xyzID,但格式为_id。所以基本上只是填充不起作用的

1 个答案:

答案 0 :(得分:0)

请查看此架构设计。这是用户。

// user.js

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

// Create schema
const UserSchema = new Schema({
    username: {
        type: String,
        required: true
    },
    password: {
        type: String,
        required: true
    }
});

module.exports = User = mongoose.model('user', UserSchema);

现在这是活动架构。现在您可以看到我正在从“用户”模式中引用userId。因此,您需要确保您的集合名称和引用名称相同。之后,它应该可以工作。

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

// Create schema
const ActivitySchema = new Schema({

    userId: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'user'
    },
    text: {
        type: String,
        required: true
    }
});

module.exports = Activity = mongoose.model('activity', ActivitySchema);

然后尝试查询

Activity.findOne({_id: req.payload._id })
     .populate('userId')
     .then(result => { console.log(result); })
     .catch(err => { console.log(err); });

您将在userId对象内看到用户信息。