【发布时间】:2015-07-01 21:23:29
【问题描述】:
我有一个猫鼬模式User 和一个字段friends,它再次引用User 模式,如下所示:
var UserSchema = new Schema({
name: String,
email: { type: String, lowercase: true },
role: {
type: String,
default: 'user'
},
friends: [{ type: Schema.Types.ObjectId, ref: 'User'}]
});
这很好用,我可以像这样设置其中一些后在数据库中看到用户 ID:
var test = new User({...});
var admin = new User({...});
var users = [test, admin];
User.find({}).remove(function () {
User.create(users, function () {
console.log('finished populating users');
});
});
但现在我想在获取单个用户时填充 friends 字段,就像在文档中一样,我这样做:
exports.show = function (req, res, next) {
var userId = req.params.id;
User.findById(userId)
.populate('friends')
.exec(function (err, user) {
if (err) return next(err);
if (!user) return res.send(401);
res.json(user.profile);
});
};
但我只是恢复了正常/未填充的用户 ID!
我感觉这是因为用户架构的自引用,但 ID 在数据库中显示良好...
建议的副本并没有真正帮助我,因为我什至没有使用那么多嵌套,问题可能只是架构的自引用!
有什么想法吗?提前致谢!
【问题讨论】:
-
mongoose recursive populate 的可能重复项
-
嗯,可能是,但我没有超过这一级。只是
populate()不起作用...