在mongo中查询嵌入式集合

时间:2012-09-19 19:44:49

标签: mongodb mongoose

我想查询我的帖子集合中的所有项目以查找最新评论。目前,每个帖子都有嵌入式评论集合,如此

{ "_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")
    }
]}

我如何在posts集合中查询最新评论,比某个日期时间更新的评论,或者通过comment.uname等评论属性查询?

我能以某种方式使用map reduce来实现这个目标吗?

1 个答案:

答案 0 :(得分:0)

我不确定是否可以返回当前架构的注释。但是,您可以返回包含符合特定条件的评论的所有帖子。 MongoDB的db.find()匹配文档而不是嵌入文档。你可以做:

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

它将返回包含所有评论的所有帖子,这些评论包含的评论大于指定的日期,但也会返回该帖子的其他评论。

您可能有以下几种选择:

  • 更改架构以单独存储注释
  • 查询包含与您的查询匹配的评论的所有文档并迭代完成 查询中的相关评论