Я использую 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);
Это правильно? Или как мне это сделать?





Проверьте это из документации мангуста: 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.info('The user is %s %s', review.user.firstName, review.userLastName);
// prints "The user is So-and-so"
});
Спасибо. Это то, что я искал.