【问题标题】:Mongoose: How to use ObjectId to link models?Mongoose:如何使用 ObjectId 链接模型?
【发布时间】:2019-12-30 19:51:44
【问题描述】:

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


    【解决方案1】:

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

    【讨论】:

    • 谢谢。这就是我一直在寻找的。​​span>
    猜你喜欢
    • 1970-01-01
    • 2016-10-03
    • 2017-08-11
    • 2016-09-14
    • 2016-06-12
    • 2020-05-24
    • 2018-11-05
    • 2021-11-04
    • 2012-08-20
    相关资源
    最近更新 更多