MongoDB - 猫鼬:文档 structure/architecture
MongoDB - Mongoose: document structure/architecture
我有一个相对简单的问题,但是,我总是一遍又一遍地卡住。我认为这是我第四次尝试重新构建我的文档以尝试获得所需的结果。
我想在 mongoose 中创建一个具有以下结构的数据库:
一个用户有很多组, posts 和 评论 。 组、posts和评论都属于用户。一个 post 可以属于许多 组 ,或 none。并且评论属于某个post.
这是我目前的情况:
用户架构
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'
}
});
虽然我在这个假设上可能是错误的,但我认为我对用户的 post 和对 post 关系的评论应该是这样的。如果我错了,请纠正我。我现在遇到的主要问题是我的团队与 post 的关系。目前,根本没有任何关系。据我所知,这几乎就像该组属于 post,而不是相反。我能想到的构建小组的唯一其他方法是这样的:
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....
}]
});
我在上面的结构中看到的唯一问题是 post 需要成为组的一部分,我希望它是可选的。据我所知,这也行不通。
如果您能就如何构建本文提供任何建议,那将对我有很大帮助。
提前谢谢你。
您最好的选择是将您的群组和评论模式嵌入到您的 post 文档中。例如,
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,您可以按如下方式构建查询。但是,您可以构建比这更复杂的查询。
Post.elemMatch("groups", {name: {$in: ["group1", "group2"]}}).then(...)
我有一个相对简单的问题,但是,我总是一遍又一遍地卡住。我认为这是我第四次尝试重新构建我的文档以尝试获得所需的结果。
我想在 mongoose 中创建一个具有以下结构的数据库:
一个用户有很多组, posts 和 评论 。 组、posts和评论都属于用户。一个 post 可以属于许多 组 ,或 none。并且评论属于某个post.
这是我目前的情况:
用户架构
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'
}
});
虽然我在这个假设上可能是错误的,但我认为我对用户的 post 和对 post 关系的评论应该是这样的。如果我错了,请纠正我。我现在遇到的主要问题是我的团队与 post 的关系。目前,根本没有任何关系。据我所知,这几乎就像该组属于 post,而不是相反。我能想到的构建小组的唯一其他方法是这样的:
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....
}]
});
我在上面的结构中看到的唯一问题是 post 需要成为组的一部分,我希望它是可选的。据我所知,这也行不通。
如果您能就如何构建本文提供任何建议,那将对我有很大帮助。
提前谢谢你。
您最好的选择是将您的群组和评论模式嵌入到您的 post 文档中。例如,
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,您可以按如下方式构建查询。但是,您可以构建比这更复杂的查询。
Post.elemMatch("groups", {name: {$in: ["group1", "group2"]}}).then(...)