Mongoose:如何使用 ObjectId 链接模型?

jam*_*ler 2 mongoose express

我正在使用 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);
Run Code Online (Sandbox Code Playgroud)

我想以评论属于用户的方式链接两个模型。

我读过 ObjectId,但不清楚如何实现它。我应该创建它,然后使用它,像这样:

const MyObjectId = mongoose.Types.ObjectId;
Run Code Online (Sandbox Code Playgroud)

然后覆盖模型的 _id 我想用它链接到我的第一个模型?

const MyObjectId = mongoose.Types.ObjectId;
Run Code Online (Sandbox Code Playgroud)

这样对吗?或者我将如何做到这一点?

L. *_*man 5

从猫鼬文档中查看: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);
Run Code Online (Sandbox Code Playgroud)

完成后,来自 User 文档的 _id 将存储在 Review 文档的 user 字段中。然后你可以做这样的事情:

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"
    }); 
Run Code Online (Sandbox Code Playgroud)