【发布时间】:2015-07-07 08:01:40
【问题描述】:
我可以在这里使用一些帮助,但我无法弄清楚为什么 populate 方法不能按预期工作。 我想为一些里面有人的“房间”建模。
var PersonSchema = new Schema({
_id : Schema.ObjectId,
name : String,
});
var Person = mongoose.model('Person', PersonSchema, 'Person');
var RoomSchema = new Schema({
_id : Schema.ObjectId,
name : String,
People : [{ type: Schema.ObjectId, ref: 'Person' }],
});
var Room = mongoose.model('Room', RoomSchema, 'Room');
所以,我有一个包含一个条目的 Person 集合:
{
"name" : "person1",
"_id" : ObjectId("4f9e5bb68bcd69fb0c000002")
}
还有一个带有一个条目的 Room 集合:
{
"_id" : ObjectId("4f9e5bb68bcd69fb0c000001"),
"name" : "room1",
"People" : [ ObjectId("4f9e5bb68bcd69fb0c000002") ]
}
当我尝试执行这个查询时:
Room.findOne({ 'name': 'room1' }).populate('People').run(function (err, result) {
if(err) console.log(err);
console.log(result);
});
我得到输出:
{ _id: 4f9e5bb68bcd69fb0c000001,
name: 'room1',
People: []
}
为什么 Mongoose 不填充人员字段?我只是不明白可能出了什么问题。
【问题讨论】:
-
我一直在搜索,似乎问题出在我强制集合名称的事实: var Person = mongoose.model('Person', PersonSchema, 'Person');如果我像这样更改模型: var Person = mongoose.model('Person', PersonSchema);一切正常。但这并不能解决我的问题,因为我确实需要强制收集名称...