我很难用MongooseJS填充一系列子文档。有人可以帮忙吗?
这是user.js:
var mongoose = require("mongoose");
var userSchema = new mongoose.Schema({
name: {
type: String
},
positions: {
type: [mongoose.Schema.ObjectId],
ref: 'position'
}
});
userSchema.statics.getUserByID = function (id, callback){
return this.findOne({_id: id}).populate('positions').exec(callback);
};
var user = mongoose.model('user', userSchema);
module.exports = user;
这里是position.js
var mongoose = require("mongoose");
var positionSchema = new mongoose.Schema({
modifiedDate: {
type: Date
},
location: {
type: [Number],
index: '2d'
}
});
var position = mongoose.model('position', positionSchema);
module.exports = position;
调用getUserByID时,未填充用户模式的位置数组。我错过了一些明显的东西吗?
修改
根据下面的答案,我已将用户架构更改为:
var mongoose = require("mongoose");
var userSchema = new mongoose.Schema({
name: {
type: String
},
positions: [{
type: mongoose.Schema.ObjectId,
ref: 'position'
}]
});
userSchema.statics.getUserByID = function (id, callback){
return this.findOne({_id: id}).populate('positions').exec(callback);
};
var user = mongoose.model('user', userSchema);
module.exports = user;
我还从位置模式中删除了location
属性,以防有些奇怪的事情发生在那里。
我尝试过的任何东西似乎都没有任何区别。
以下是users
集合中当前保存的内容:
{
"__v": 1,
"_id": {
"$oid": "531f8ab89938130200433ef8"
},
"modifiedDate": {
"$date": "2014-03-11T22:14:43.174Z"
},
"name": "Josh",
"positions": [
{
"$oid": "531f8ad39938130200433efa"
}
]
}
以下是positions
集合中的内容:
{
"modifiedDate": {
"$date": "2014-03-11T22:14:43.163Z"
},
"_id": {
"$oid": "531f8ad39938130200433efa"
},
"__v": 0
}
供参考我在"mongoose": "^3.8.8"
文件中使用package.json
。
我真的很难过,任何帮助都会受到赞赏。
答案 0 :(得分:4)
您在用户架构中犯了一个小而重要的拼写错误 - position
字段的类型不应设置为ObjectId
的数组。你可能想要的是这个架构:
var userSchema = new mongoose.Schema({
name: {
type: String
},
positions: [{
type: mongoose.Schema.ObjectId,
ref: 'position'
}]
});
答案 1 :(得分:3)
尝试使用" mongoose.Schema.Types.ObjectId"而不是" mongoose.Schema.ObjectId",我前段时间遇到了类似的问题。但我肯定不会对你的情况有所帮助。
答案 2 :(得分:1)
我没有进一步的前锋。
我重构了所有内容,以便我可以直接查询子文档而不是依赖于populate方法。