Gar*_*nay 2 php mongodb lithium
我目前有一个 Channels 集合,存储如下:
{ "_id" : ObjectId("4f5d1012d48147e840000000"), "title" : "Testing", "description" : "hello!", "created" : "2012-03-11 20:50:26", "user" : ObjectId("4f5d0408d48147207f000000") }
Run Code Online (Sandbox Code Playgroud)
但我希望用户现在能够订阅这个频道。我认为这还不够重要,不足以被视为自己的收藏,所以我想将其存储为以下内容:
{
"_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")
}
Run Code Online (Sandbox Code Playgroud)
尽管我似乎无法弄清楚如何在我的锂对象中干净地实现这一点。我的$story->vote属性是否是一个在每次更新时推送到的数组?
小智 5
恕我直言,您如何构建它取决于您如何使用订阅。
我这么说的原因是因为嵌入式 mongo 对象与链接集合的性能问题。http://www.mongodb.org/display/DOCS/Schema+Design
我建议不要将用户 ID 与订阅放在一起,而是将频道 ID 与用户链接起来(频道 ID 作为订阅用户中的嵌入集合)。
这里的用法是有意义的,因为当您拉取用户的集合(对于他们的控制面板或仪表板或首页等...)时,您将有要显示的频道列表。
仅当您计划显示频道并显示订阅它们的所有用户时,将用户 ID 嵌入频道才有意义,有点像堆栈溢出中的聊天系统。
如果您计划进行聚合或者将有多个集合访问订阅,则将它们放入单独的集合中是有意义的。