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

このスキーマは最善の解決策ではありません。コメント用に別のコレクションを使用するか、コメントを 2 回保存します。しかし、Mongo DB 2.2 では、次の集計クエリでそれを行うことができます。

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

ドキュメントも確認してください。

于 2012-08-30T09:38:41.467 に答える