MongoDB的:在父对象中存储订阅服务器数组
题
我目前有一个Channels集合,存储为以下内容:
{ "_id" : ObjectId("4f5d1012d48147e840000000"), "title" : "Testing", "description" : "hello!", "created" : "2012-03-11 20:50:26", "user" : ObjectId("4f5d0408d48147207f000000") }
但我希望用户现在能够订阅这个频道。我不认为这足够重要,可以被认为是它自己的收藏,所以我想将它存储为以下内容:
{
"_id" : ObjectId("4f5d1012d48147e840000000"),
"title" : "Testing",
"description" : "hello!",
"subscriptions" :
{ "user" : ObjectId("USERIDHERE"), "created" : DATETIME },
{ "user" : ObjectId("USERIDHERE"), "created" : DATETIME },
{ "user" : ObjectId("USERIDHERE"), "created" : DATETIME }
"created" : "2012-03-11 20:50:26",
"user" : ObjectId("4f5d0408d48147207f000000")
}
虽然我似乎无法弄清楚如何在我的锂物体中干净地实现这一点。我的 $story->vote
属性是我在每次更新时推送到的数组?
解决方案
恕我直言,你如何构建这将取决于你将如何使用订阅。
我之所以这样说是因为嵌入式mongo对象与链接集合的性能问题。 http://www.mongodb.org/display/DOCS/Schema+Design
而不是将用户id与订阅放在一起,我会建议将频道id与用户链接(频道id作为订阅用户中的嵌入集合)。
这里的用法是有道理的,因为当你拉动用户的集合(对于他们的控制面板或仪表板或首页等。..)您将有要显示的频道列表。
在频道中嵌入用户id只有在您计划显示频道并显示订阅它们的所有用户时才有意义,有点像stack overflow中的聊天系统。
如果您计划进行聚合或将有多个集合访问订阅,则将它们放在单独的集合中是有意义的。
不隶属于 StackOverflow