Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用MongoDB和Mongoose建模_Mongodb_Mongoose_Nosql - Fatal编程技术网

用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的同时将评论嵌入用户模式似乎是正确的方法,因为我们不需要获取任何其他内容。这不是“正确”的问题,我也没有以这种方式批评你,尽管你似乎已经这样解释了。正如我所说,这实际上是关于“你如何使用它”。没有“最好的办法”,只有“对你最好的办法”。只有您和您的代码使用情况才能确定哪一个是最好的。