我需要在dbref中使用mongoose,但我不知道哪种设计对我更好。
首先设计:
var user = mongoose.Schema({
name: 'string'
});
var eventSchema = mongoose.Schema({
title: 'string',
propietary_id: 'String',
comments : [{
text: 'string',
user: { type : mongoose.Schema.Types.ObjectId, ref : 'users' },
createdAt: {type: Date, default: Date.now }
}]
});
第二个设计:
var user = mongoose.Schema({
name: 'string'
});
var eventSchema = mongoose.Schema({
title: 'string',
propietary_id: 'String'
});
var commentSchema = mongoose.Schema({
text: 'string',
event_id : { type : mongoose.Schema.Types.ObjectId, ref : 'events' },
user_id : { type : mongoose.Schema.Types.ObjectId, ref : 'users' },
createdAt: {type: Date, default: Date.now }
});
它是如何工作的?在我的网站上有一个事件列表,如果你想看到评论,你必须点击每个事件,然后angularjs获取所选事件的所有评论(文本,用户名和用户照片)。
答案 0 :(得分:0)
两种解决方案都有利弊,最适合您的解决方案取决于您的使用方法。请记住,您可以独立于您的设计生成完全相同的API,但这仅限于您可以快速轻松地维护后端。首先考虑两种设计:
首先评论,我不会将评论保存为嵌套文档,而是作为数组保存。否则,每个活动仅限一个评论。请改用此架构:
comments: [
{
text: { type: String },
user: { type: mongoose.Schema.Types.ObjectId, ref : 'users' },
createdAt: { type: Date, default: Date.now },
}
]
优点:
缺点:
优点:
缺点:
所有优缺点都取决于您需要编写多少额外代码。当然,您也可以随后在第二个设计中返回与事件一起返回的注释,但是您将首先提取注释并将其与事件对象一起返回,这将意味着要维护额外的代码。
我认为第二种设计对你来说会更好。我通过您的评论来判断,如果用户点击某个活动,您只需要评论。然后,当用户点击事件时,我会首先请求事件并再次发出评论请求,但是,随着事件返回总是返回注释应该使得ui更加敏捷,因为注释已经被加载。
这一切最终取决于您对数据的重要性。如果您对任何要点有任何疑问,请与我们联系。