[英]MongoDB - Mongoose: document structure/architecture
我有一个相对简单的问题,但是我一遍又一遍地陷入困境。 我认为这是我第四次尝试重组文档以尝试获得预期的结果。
我想用以下结构在猫鼬中创建数据库:
一个用户有许多组 , 帖子和评论 。 组 , 帖子和评论均属于用户 。 帖子可以属于多个组 ,也可以不属于任何组 。 评论属于某个帖子 。
这是我到目前为止的内容:
UserSchema
var userSchema = mongoose.Schema({
local : {
email : String,
password : String,
username : String,
created: {type:Date, default: Date.now}
}
});
PostSchema
var PostSchema = new Schema({
url: String,
highlighted: String,
comment: String,
image: String,
timeStamp: String,
description: String,
title: String,
created: {type:Date, default: Date.now},
private: Boolean,
favorite: Boolean,
readlater: Boolean,
postedBy: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
},
comments: [{
text: String,
postedBy: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
}
}],
groups: [{
name: String,
postedBy: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
}
}]
});
groupSchema
var GroupSchema = Schema({
name : String,
created: {type:Date, default: Date.now},
postedBy: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
}
});
尽管在这个假设上我可能是错的,但我认为我已经按原本的方式向用户发布了帖子,并发表了评论来发布关系。 如果我错了,请纠正我。 我目前遇到的主要问题是与小组发布关系。 当前,没有任何关系。 据我所知,几乎就像该群组属于该职位,而不是相反。 我可以想到的唯一一种组织小组的方式是:
var GroupSchema = Schema({
name : String,
created: {type:Date, default: Date.now},
postedBy: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
},
posts: [{
title: String,
Url: String,
comments: [{
text: String
}]
etc....
}]
});
我在上面的结构中看到的唯一问题是,该帖子将被要求成为组的一部分,而我希望这是可选的。 据我所知,这也不起作用。
如果您可以就该如何组织提供任何建议,那将对我有很大帮助。
先感谢您。
最好的选择是将组和注释架构嵌入到后期文档中。 例如,
var GroupSchema = Schema({
name: String,
created: { type:Date, default: Date.now },
});
var CommentSchema = Schema({
text: String,
postedBy: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
}
});
var PostSchema = new Schema({
url: String,
...,
postedBy: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
},
comments: [CommentSchema]
groups: [GroupSchema]
});
现在,如果要查找具有特定组的帖子,则可以按以下方式构建查询。 但是,您可以构建更复杂的查询。
Post.elemMatch("groups", {name: {$in: ["group1", "group2"]}}).then(...)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.