我有一个这样的模型:
var userSchema = new mongoose.Schema({
_id: { type: Schema.ObjectId },
email: { type: String, unique: true },
ipAddress: { type: String },
referals: [{
type: mongoose.Schema.Types.ObjectId, ref: 'User'
}],
redeem_token: {type: String, unique: true}
});
var User = mongoose.model('User', userSchema);
这可以吗?用户需要具有对其他用户的引用。它是跟踪注册推荐的。我想然后使用.Populate并在referals []
中扩展用户答案 0 :(得分:18)
我正在使用猫鼬。这对我有用,我只是使用this
作为模型的参考。
我有一个Comment
模型。评论的回复也是Comment
。
var Comment = new mongoose.Schema({
id: { type: ObjectId, required: true },
comment: { type: String },
replies: [ this ],
});
答案 1 :(得分:0)
我知道这个问题很旧。但是我在寻找解决类似问题的方法时偶然发现了这一点。因此,这是供将来寻求知识的人使用!
如果要在用户文档中创建引荐,Ankur的答案将有所帮助。 例如:
{
_id: 'XXX',
...
referals: [{_id:'yyy',email: ''}]
}
我认为使用Mongoose Virtuals将有助于更好地扩展应用程序。使用虚拟机,您不必创建重复的记录。
因此,如果您决定使用Mongoose Virtuals,您的架构将如下所示
var userSchema = new mongoose.Schema({
_id: { type: Schema.ObjectId },
email: { type: String, unique: true },
ipAddress: { type: String },
referedBy: {
type: mongoose.Schema.Types.ObjectId, ref: 'User'
},
redeem_token: {type: String, unique: true}
});
userSchema.virtuals('refereals',{
ref: 'User',
localField: '_id',
foreignField: 'referedBy',
justOne: false,
},{ toJSON: { virtuals: true } }); /* toJSON option is set because virtual fields are not included in toJSON output by default. So, if you don't set this option, and call User.find().populate('refereals'), you won't get anything in refereals */
var User = mongoose.model('User', userSchema);
希望这会有所帮助。如果我错了,请纠正我,因为我是新手。