我正在使用 Meteor 构建一个Web应用程序 - 因此 MongoDB - 允许用户在日历上创建,管理和协作:
user
可以包含多个calendars
。calendar
可以共享users
{/ 1}}。user
在给定的role
中都会有一个特定的calendar
。calendar
包含许多posts
(但post
只属于一个calendar
。)以下是我根据MongoDB documentation和本系列视频中关于MongoDB schema design的一些研究,设计数据库的方法。
第一:
user document
{
_id: <ObjectId1>,
firstName: "Mickael",
lastName: "Jackson",
emailAddress: "mickael.jackson@example.com",
password: "#encrypted",
calendars = [
{
_id: <ObjectId2>,
role: "Owner"
},
}
这里的想法是:
Multikey Index
数组使用calendar
,这样我们就可以找到calendars
的所有user
并找到所有users
calendar
。user
将在登录时始终访问其calendars
,但他很少会使用其中一个users
查找calendars
{1}} ... ,然后:
calendar document
{
_id: <ObjectId2>,
title: "Holidays"
}
和:
post document
{
_id: <ObjectId3>,
calendar: calendarId,
date: "08122015",
time: "0930",
focus: "news",
format: "link",
blogTitle: 1,
longCopy: "This is the long copy for this post.",
shortCopy: "Short copy.",
link: "http://www.google.com",
hashtag: "#weekend",
media: "image.png",
promotion: "50",
target: "Los Angeles",
approval: "Ok",
comment: "No comment"
}
这里的想法是:
calendar
title
不应经常更改的事实,尽管必要时可以更改。posts
将true linking
保留在单独的集合中,因为帖子很多(很多信息,包括媒体项),并且会超过 MongoDB 文档的16Mb限制如果嵌入calendars
。posts
,而无需每次都写入calendars
或profile
... 我对MongoDB的尝试并不多,我想知道: