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

问题描述 投票:0回答:2

我正在使用 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);

这是正确的吗?或者我该怎么做?

express mongoose
2个回答
6
投票

从 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"
    }); 

0
投票

创建用户模型后,这是您可以将用户与评论链接起来的方式

        const review = new mongoose.Schema(
           {
          user:{
                 type:mongoose.Schema.ObjectId,
            ref : 'user'  
             required :[true, 'review must have user']
           }
               }
           )
© www.soinside.com 2019 - 2024. All rights reserved.