我正在使用 Express、Mongoose 和 Mongodb。我有两个模型,一个用于用户,另一个用于审核,如下所示:
var User = mongoose.Schema({
firstName: String,
lastName: String,
email: String
});
mongoose.model("User", User);
var Review = mongoose.Schema({
foodRating: Number,
serviceRating: Number,
locationRating: Number,
wouldReturn: boolean
});
mongoose.model("Review", Review);
我想链接这两个模型,以评论属于用户的方式。
我读到了ObjectId,但不清楚如何实现它。我应该创建它,然后使用它,就像这样:
const MyObjectId = mongoose.Types.ObjectId;
然后覆盖我想用它链接到我的第一个模型的模型的_id?
var User = mongoose.Schema({
firstName: String,
lastName: String,
email: String,
review: [MyObjectId] // retrieves model below from its _id:MyObjectId
});
mongoose.model("User", User);
var Review = mongoose.Schema({
_id: MyObjectId, // overriding _id with ObjectId
foodRating: Number,
serviceRating: Number,
locationRating: Number,
wouldReturn: boolean
});
mongoose.model("Review", Review);
这是正确的吗?或者我该怎么做?
从 mongoose 文档中查看此内容:http://mongoosejs.com/docs/populate.html
基本上,您想做的是:
const MyObjectId = mongoose.Types.ObjectId;
var User = mongoose.Schema({
firstName:String,
lastName: String,
email: String,
review: [MyObjectId] // retrieves model below from its _id:MyObjectId
});
mongoose.model('User', User);
var Review = mongoose.Schema({
user: { type: MyObjectId, ref: 'User' } // overriding _id with ObjectId
foodRating: Number,
serviceRating: Number,
locationRating: Number,
wouldReturn: boolean,
});
mongoose.model('Review', Review);
完成后,用户文档中的 _id 将存储在审阅文档的用户字段中。然后你可以做这样的事情:
Review.
findOne({ foodRating: 4 }).
populate('user').
exec((err, review) => {
if (err) return handleError(err);
console.log('The user is %s %s', review.user.firstName, review.userLastName);
// prints "The user is So-and-so"
});
创建用户模型后,这是您可以将用户与评论链接起来的方式
const review = new mongoose.Schema(
{
user:{
type:mongoose.Schema.ObjectId,
ref : 'user'
required :[true, 'review must have user']
}
}
)