在 mongodb 中,如何仅选择文档中与 find() 条件匹配的对象?

Posted

技术标签:

【中文标题】在 mongodb 中,如何仅选择文档中与 find() 条件匹配的对象?【英文标题】:In mongodb, how to select just the objects in a document that match the find() criteria? 【发布时间】:2013-11-06 13:47:40 【问题描述】:

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

 
    "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() 查询来做到这一点?

【问题讨论】:

为此,您需要在聚合框架中使用 unwind @SalvadorDali 哎呀,没错。我现在已经更正了。 【参考方案1】:

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

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

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

【讨论】:

以上是关于在 mongodb 中,如何仅选择文档中与 find() 条件匹配的对象?的主要内容,如果未能解决你的问题,请参考以下文章

仅选择 Json 文档中带有 mongoose 的值

查找 Mongodb 文档,如果它包含 mongoose 中的数组中的元素

查询MongoDB文档中的特定对象并仅检索该对象

MongoDB——文档操作(查询文档)

Mongodb如何仅在不存在时插入(如果存在则不更新)?

如何在MongoDB中从某些类别中查找特定文档