mongodb - 获取嵌套对象匹配计数条件的文档

标签 mongodb mongodb-query aggregation-framework

我是一个 mongo 菜鸟,正在使用一个 mongo 集合,其中的记录如下所示:

{
    "cats" [
        {
            "name": "fluffy",
            "color": "red",           
        }, 
        {
            "name": "snowball",
            "color": "white",           
        }, 
    ]
{

我想执行一个查询,获取所有包含超过 1 只白猫的记录。 MapReduce 看起来很有前途,但似乎有点矫枉过正。感谢您的帮助。

最佳答案

您可以使用 aggregation framework去做这个。你don't need使用 $where运营商。

db.collection.aggregate([
    { "$match": { "cats.color": "white" }},
    { "$project": { 
        "nwhite": { "$map": { 
            "input": "$cats", 
            "as": "c",
            "in": { "$cond": [
                { "$eq": [ "$$c.color", "white" ] },
                1, 
                0
            ]}
        }}, 
        "cats": 1
     }},
     { "$unwind": "$nwhite" }, 
     { "$group": { 
         "_id": "$_id", 
         "cats": { "$first": "$cats" }, 
         "nwhite": { "$sum": "$nwhite" }
     }},
    { "$match": { "nwhite": { "$gte" :2 } } } 
])

关于mongodb - 获取嵌套对象匹配计数条件的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32484001/

相关文章:

javascript - MongoDB:过滤文档中的多个数组,然后将重复的数组返回为一个数据

java - Elasticsearch 和 mongodb,部分搜索不起作用

MongoDB 将查找与文本搜索相结合

linux - centos mongodb 包未签名

node.js - 如何在 Pug 文件中显示数据库中的 "fields"' 值?

javascript - 聚合将文档键展开为新文档

mongodb - 将ObjectId与$ graphLookup的字符串匹配

mongodb 单个操作中的多个聚合

mongodb - 如何正确映射我的对象以使对象列表在 mongo + play2 中工作

javascript - 我们如何监控 mongoDB 查询?