我目前有一个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中的聊天系统。

如果您计划进行聚合或将有多个集合访问订阅,则将它们放在单独的集合中是有意义的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top