【问题标题】:query embeded collections in mongo在 mongo 中查询嵌入集合
【发布时间】:2012-09-24 23:21:03
【问题描述】:

我想查询我的帖子集合中的所有项目以查找最新的 cmets。目前每个帖子都有一个嵌入式的 cmets 集合,像这样

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

如何查询帖子集合以获取最新的 cmets、比某个日期时间更新的 cmets 或通过评论属性(如 comment.uname)?

我可以使用 map reduce 来完成这个吗?

【问题讨论】:

  • 我还没有 2.2 来使用新的 agg 框架。你可以试试这个:db.posts.aggregate( {$project: {$cmets.uname:1, $cmets.msg:1 , $cmets.date:1}, {$unwind:"$cmets"}, {$sort: {$cmets.date:-1} ); )
  • 不幸的是 mongohq 还没有运行 2.2..

标签: mongodb mongoose


【解决方案1】:

我不确定是否可以仅返回具有当前架构的 cmets。但是您可以返回所有带有符合特定条件的 cmets 的帖子。 MongoDB 的 db.find() 匹配文档而不是嵌入文档。你可以这样做:

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

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

您可能有以下几种选择:

  • 更改架构以单独存储 cmets
  • 使用与您的查询匹配的 cmets 查询所有文档并遍历 查询中的相关 cmets

【讨论】:

  • 我可以使用 map reduce 以某种方式得到这个吗?
猜你喜欢
  • 1970-01-01
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-28
  • 1970-01-01
  • 1970-01-01
  • 2015-12-21
相关资源
最近更新 更多