2011-07-07 43 views
2

我目前正在建立一个慈善学生支持网站,以帮助非洲学生申请美国大学。我想构建一个线程评论系统。我打算使用MongoDB,(后端都是java)。我对MongoDB相当陌生,因此花了我一些时间来吸收所有的信息。我有一些问题给你:嵌套/线程评论系统 - MongoDB和Java

有没有人知道我可以看看有什么实现?我希望在周末结束之前完成这项工作。

我的想法做这样的:

conversation 
{ 
    _id: BigInt, 
    entityID: BigInt, //reference to what is being commented 
    comments:[ 
    status: String (approved, spam, removed), 
    UID: BigInt, 
    timestamp: date 
    commentText: String 
    likeCount: int 
    replies:[ 
     status: String (approved, spam, removed), 
     UID: BigInt, 
     timestamp: date 
     commentText: String 
     likeCount: int 
    ] 
    ] 
} 

非常感谢您的帮助,

+0

这几乎是相同的问题,并在数十张幻灯片和谈话和文档中解释。标准的“博客帖子”例子在任何地方都可以使用。 http://www.mongodb.org/display/DOCS/Schema+Design –

+0

我看到的大多数实现的问题是,如果我将回复嵌入到注释中,则很难更新回复。假设我想更改已批准的回复状态并将其删除。我怎么能用嵌入对象来做到这一点? – Anthony

+0

任何人都可以帮忙吗?我搜查了四周,但仍然找不到解决方案。谢谢 – Anthony

回答

0

你可以使用一个使用nested set model一个扁平收集的意见。维护工作有点麻烦(特别是因为你会有一个多根多数据集合),但它更具可伸缩性,更容易操作和查询。

你必须:

conversations { 
    _id: ObjectId, 
    whatever fields you need, 
} 
comments { 
    _id: ObjectId, 
    parentId: ObjectId, 
    conversationId: ObjectId, 
    authorId: ObjectID, 
    commentText: String, 
    lft: Int, 
    rght: Int, 
    ... 
} 

我不熟悉的Java驱动程序,但没有它有_id领域特定类型的?这将使您可以免费访问时间戳,并为您提供一切的唯一ID。