1

我有一个结构如下的“书籍”集合:

 {
    "isbn" : 101,
    "title" : "One",
    "author" : "Mike",
    "year" : 1980,
    "awards" : [
        {"award" : "Nebula", "year" : 1987},
        {"award" : "Hugo", "year" : 1985},
    ],
    "reviews" : [
        {"user_id" : 1, "rating" : 10, "text" : "Awesome book"},
        {"user_id" : 2, "rating" : 4, "text" : "Terrible book"},
        {"user_id" : 5, "rating" : 7, "text" : "Good book"},
    ]
}

例如,我只想选择评分高于 5 的评论对象(而不是整个文档),这样我的结果将如下所示:

"reviews" : [ 
        {"user_id" : 1, "rating" : 10, "text" : "Awesome book"},
        {"user_id" : 5, "rating" : 7, "text" : "Good book"},
]

我该如何编写 db.books.find() 查询来做到这一点?

4

1 回答 1

1

基本上正如 Sammaye 所提到的,您需要使用聚合框架。目前我的机器上没有 mongo,所以我无法验证我的查询是否有效,但我认为这样的事情必须完成这项工作:

db.books.aggregate(
  { $unwind : "$reviews" },
  { $match : {
     "reviews.rating": {$gt : 5}
  }})

只是为了使它更完整,您可以使用$elemMatch,但它只会返回第一个结果(这不是您需要的,但可能是其他人需要的)

于 2013-10-27T21:54:41.907 回答