3

我对 MongoDB(和 mongoDB 查询)很陌生,所以我有一个问题是如何编写执行以下操作的查询......

使用像我在下面说明的那样的模式......我将如何返回仅由特定用户发布的所有评论的集合?例如,我需要这个来为他们自己的个人资料页面生成用户评论列表。然而,我的意图是将评论作为帖子的子项而不是用户的子项。我假设我不需要保留多余的评论记录,并且这个查询以某种方式是可能的(可能很简单,但我是新手)。

{ title: "someTitle",
  author: "someAuthor",
  created: Date,
  comments: [{authorId: objectId, content: "commentContent"},{authorId: objectId, content: "commentContent"}],
  postContent: "This is the content of the post"
}
4

2 回答 2

3

对于这种情况,最好将评论分开收集:

comments
{
  authorid,
  postId,
  content
}

然后您可以轻松查询用户评论:

db.comments.find({authorid: 5});

您的架构不适用于您的业务,或者会给您带来某种痛苦。

于 2012-08-30T09:14:41.490 回答
1

这个模式这个模式不是最好的解决方案,我会单独收集评论或存储评论两次。但是使用 Mongo DB 2.2,您可以使用以下聚合查询来做到这一点:

db.articles.aggregate(
    {$unwind : '$comments'}, 
    {$match : {'comments.authodId' : 'authodId'}},
    {$project : {comments : 1}});

另请检查文档

于 2012-08-30T09:38:41.467 回答