1

我目前有一个 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财产会是我在每次更新时推送的数组吗?

4

1 回答 1

4

恕我直言,您的结构将取决于您将如何使用订阅。

我之所以这么说是因为嵌入式 mongo 对象与链接集合的性能问题。http://www.mongodb.org/display/DOCS/Schema+Design

我建议将频道 ID 与用户链接(频道 ID 作为订阅用户中的嵌入式集合),而不是将用户 ID 与订阅放在一起。

此处的用法很有意义,因为当您拉取用户的集合(用于他们的控制面板或仪表板或首页等)时,您将拥有要显示的频道列表。

只有当您计划显示频道并显示所有订阅它们的用户时,在频道中嵌入用户 ID 才有意义,有点像堆栈溢出中的聊天系统。

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

于 2012-03-13T02:15:42.250 回答