2010-07-27 48 views
4

我正在实施基于MongoDB的博客。Mongo一对多关系和更新问题

让我们来看看第一个蒙戈如何家伙建议我们存储的博客文章和评论意见(http://www.mongodb.org/display/DOCS/Schema+Design):

  • 的帖子应该是一个集合。评论应该是嵌入对象中的表现。

我发现编辑或只是批准这个模式中的注释非常困难。

由于评论是Post文档的一部分,我无法单独编辑它,因为它没有标识符可以在评论集合中找到它。

这就是为什么我一次编辑所有评论。另一个问题是,在我编辑所有评论的同时,有人可能会发布新评论,并且在保存评论集合后会被覆盖。

可能是我做错了什么?或者Mongo所描述的用例期望这些评论不会被编辑。

Regards, Alexey Zakharov。

+0

这适用于大多数文档数据库。自己来对抗。 – mxmissile 2010-07-27 19:51:36

回答

3

你应该可以使用Atomic Operators来解决'保存所有评论'的问题。例如,这样的事情应该工作:

db.posts.update({ _id: [ID] }, { $set: { "comments.5.body" : "New Comment Body" } }) 

编辑:只是在我上面的回答扩大。原子操作符的工作方式是只更新您告诉他们的特定字段,而不是整个文档。这不仅使您的更新更简洁,而且更快。特别是如果在你的例子中,你有一个很大的博客文章,有很多评论。

+0

我可以证实这确实是答案。 – 2010-07-28 17:09:01

+0

谢谢史蒂文。我之前没有听说过点符号 - http://www.mongodb.org/display/DOCS/Dot+Notation+%28Reaching+into+Objects%29。 – 2010-07-29 03:26:04