用MongoDB和Mongoose建模
我有一个简单的应用程序,其中列出了导游和用户留下的关于每个导游的评论。任何用户都可以提供指导和评论。我的用户方案是:用MongoDB和Mongoose建模,mongodb,mongoose,nosql,Mongodb,Mongoose,Nosql,我有一个简单的应用程序,其中列出了导游和用户留下的关于每个导游的评论。任何用户都可以提供指导和评论。我的用户方案是: var User = new mongoose.Schema({ firstName: { type: String, required: true, unique: true }, lastName: { type: String, required: true, unique: true }, email: { type: String, requi
var User = new mongoose.Schema({
firstName: { type: String, required: true, unique: true },
lastName: { type: String, required: true, unique: true },
email: { type: String, required: true, unique: true },
password: { type: String, required: true}
isGuide: Boolean,
rating: {type: Number, "default": 0, min: 0, max: 5},
reviews: [reviewSchema]
});
var Review = new mongoose.Schema({
userId: {type: Schema.ObjectId, ref: 'User'},
author: {type: String, required: true},//contatenation of firstName and lastName of user that wrote review
rating: {type: Number, required: true, min: 0, max: 5},
reviewText: {type: String, required: true},
createdOn: {type: Date, "default": Date.now}
});
mongoose.model('User', User);
我希望能够:
1/展示一份指南和所有该指南的评论
2/显示用户的所有评论
3/显示用户已审阅的所有指南
我认为我上面的模式适合1。但是它适合2和3吗?我是否正确地理解了MonboDB哲学?大多数一般NoSQL解决方案的哲学,以“模拟您实际如何使用它”。那么你实际上是如何使用它的呢?您是否一次读取更多相关数据?您是更新相关内容还是单独更新?这是“引用”到“嵌入”的基础,后者是NoSQL解决方案(如MongoDB)的原生概念,而不是API实现(如mongoose)。如果你认为这不能回答你的问题,那至少应该给你一些思考的食物。关于这个话题有很多阅读材料。谢谢。我相信我的模式是正确的,因为评论主要属于指南。因此,在缓存firatName和lastName的同时将评论嵌入用户模式似乎是正确的方法,因为我们不需要获取任何其他内容。这不是“正确”的问题,我也没有以这种方式批评你,尽管你似乎已经这样解释了。正如我所说,这实际上是关于“你如何使用它”。没有“最好的办法”,只有“对你最好的办法”。只有您和您的代码使用情况才能确定哪一个是最好的。