1

投稿コレクション内のすべてのアイテムをクエリして、最新のコメントを見つけたいと考えています。現在、各投稿には次のようなコメントのコレクションが埋め込まれています

{ "_id" : ObjectId("4f84b8da6c33f31122000001"), "comments" :    
[{
        "uname" : "bargledoofus",
        "msg" : "hello hello hello",
        "_id" : ObjectId("4fe926fa811ec70100008888"),
        "date" : ISODate("2012-06-26T03:05:30Z")
    },
    {
        "uname" : "bargledoofus",
        "msg" : "moar hello",
        "_id" : ObjectId("4fe9272b2f1efb0100000078"),
        "date" : ISODate("2012-06-26T03:06:19Z")
    },
    {
        "uname" : "bargledoofus",
        "msg" : "most hello ever",
        "_id" : ObjectId("4fe92cfd7614c8010000002b"),
        "date" : ISODate("2012-06-26T03:31:09Z")
    },
    {
        "uname" : "bargledoofus",
        "msg" : "i think i've got it",
        "_id" : ObjectId("4fe92d04f4a35c010000000e"),
        "date" : ISODate("2012-06-26T03:31:16Z")
    }
]}

最新のコメント、特定の日時よりも新しいコメント、または comment.uname などのコメント属性によって、posts コレクションにクエリを実行するにはどうすればよいですか?

これを達成するために map reduce を使用できますか?

4

1 に答える 1

0

現在のスキーマでコメントだけを返すことができるかどうかはわかりません。ただし、特定の条件に一致するコメントを含むすべての投稿を返すことができます。MongoDB の db.find() はドキュメントに一致し、埋め込まれたドキュメントには一致しません。次のことができます。

db.posts.find({"comments.date":{$gt:<insert date object>}})

指定された日付より後のコメントを含むすべてのコメントを含むすべての投稿を返しますが、その投稿の他のコメントも返します。

あなたが持つかもしれないいくつかのオプションは次のとおりです。

  • コメントを個別に保存するようにスキーマを変更する
  • クエリに一致するコメントを含むすべてのドキュメントをクエリし、クエリ内の関連するコメントを反復処理します
于 2012-09-19T21:25:05.910 に答える