Mongoose Populate不使用Array of ObjectIds

时间:2016-10-13 05:08:25

标签: node.js mongodb mongoose mongoose-schema mongoose-populate

这是我的架构:

/** Schemas */
var profile = Schema({
    EmailAddress: String,
    FirstName: String,
    LastName: String,
    BusinessName: String
});

var convSchema = Schema({
    name: String,
    users: [{
        type: Schema.Types.ObjectId,
        ref: 'Profiles'
    }],
    conversationType: {
        type: String,
        enum: ['single', 'group'],
        default: 'single'
    },
    created: {
        type: Date,
        default: Date.now
    },
    lastUpdated: {
        type: Date,
        default: Date.now
    }
});

/** Models */
db.Profiles = mongoose.model('Profiles', profile);
db.Conversations = mongoose.model('ChatConversations', convSchema);

module.exports = db;

然后我尝试使用以下代码(http://mongoosejs.com/docs/populate.html)填充用户:

db.Conversations.find(query).populate('users').exec(function (err, records)     {
    console.log(records);
});

这会将recordsusers数组作为空白数组[]返回。

我也尝试过相反的方式(http://mongoosejs.com/docs/api.html#model_Model.populate):

db.Conversations.find(query, function (err, records) {
    db.Conversations.populate(records, {path: "users", select: "BusinessName"}, function (err, records) {
        console.log(records);
    });
});

结果相同。当我检查了对个人资料收集记录的引用时。

知道这里有什么问题吗?

2 个答案:

答案 0 :(得分:4)

我通过重命名模型(第3个论点)来实现它:

mongoose.model( "Profiles", profile, "Profiles" );

问题是Mongoose正在搜索profiles集合,但在数据库中搜索Profiles。所以我将其重命名为Profiles以匹配确切的名称。

Phewww!谢谢我。

答案 1 :(得分:0)

我发现您已声明了配置文件架构,但是参考配置文件。

 ref: 'Profiles'

var profile = Schema({
EmailAddress: String,
FirstName: String,
LastName: String,
BusinessName: String
});