views:

105

answers:

1

Hi guys,

I'm implementing blog based on MongoDB.

Let's look at first how Mongo guys recommend us to store blog post and its comments (http://www.mongodb.org/display/DOCS/Schema+Design):

  • posts should be a collection. comments should be embedded objects within a post for performance.

I found that it is very difficult to edit or just approve comments in this schema.

Due to comment is a part of Post document i cannot edit it separately because it has no identifier to find it in comments collection.

That is why I'm editing all comments at once. Another problem is that while i'm editing all comments at once someone could post a new comment and it will overrided after saving of comments collection.

May be I'm doing something wrong? Or the use case described by Mongo guys expect that comments won't be edited.

Regards, Alexey Zakharov.

+2  A: 

You should be able to use Atomic Operators to get around the 'saving all comments' issue. For example, something like this should work:

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

Edit: Just to expand on my above answer. The way atomic operators work is by only updating the specific field(s) you tell them to, rather than the whole document. This not only makes your update more concise but also considerably faster. Especially if, in your example, you have a large blog post with many comments.

Steven Surowiec
I can confirm that this is indeed the answer.
Gates VP
Thanks Steven. I haven't heard about Dot Notations before - http://www.mongodb.org/display/DOCS/Dot+Notation+%28Reaching+into+Objects%29.
Alexey Zakharov