【问题标题】:How to get data Mongo data using aggregate MongoDB如何使用聚合 MongoDB 获取数据 Mongo 数据
【发布时间】:2017-10-10 09:36:45
【问题描述】:

假设我们有 10 个集合,那么我们必须根据tag_id 找到计数。例如,如果tag_id 包含 0 和 1,那么我们必须计算所有数据,以及计算没有 tag_idtag_id 为空的数据。然后如果它有 unread : false 那么输出来,所有未读的计数。

查找 tag_id 的计数和未读计数(如果为 false)。

 {
        "_id": ObjectId("5912c7240520df77f0c2c18a"),
        "email_id": "54",
        "unread": "false",
        "__v": NumberLong(0),
        "tag_id": ["0"

        ]
    }, {
        "_id": ObjectId("5912c71e0520df77f0c2c189"),
        "email_id": "55",
        "unread": "false",
        "__v": NumberLong(0),
        "tag_id": [
            "1"
        ]
    }, {
        "_id": ObjectId("5912c71d0520df77f0c2c186"),
        "email_id": "51",
        "unread": "false",
        "__v": NumberLong(0),
        "tag_id": [
            "2", "1"
        ]
    }

预期结果:

{
    "data": [{
        "tag_id": "1",
        "count_email": 1,(count of email on the basis of tag_id)
        "unread": 9(count the unread on the basis of output of tag_id)
    }, {
        "tag_id": "3",
        "count_email": 45,
        "unread": 3
    }, {
        "tag_id": "2",
        "count_email": 5,
        "unread": 4
    }, {
        "id": null,
        "count_email": 52,
        "unread": 35
    }]
}

【问题讨论】:

  • 这不清楚,预期的输出与您提供的示例文档不对应。您能否更新预期输出并添加一些有关您尝试实现的目标的详细信息?
  • Mongo 提供聚合、map reduce 等功能……但这些操作在实践中无法在事务系统中扩展。如果是用于分析,那么有比 mongo 更适合的数据存储。
  • 谢谢。好的 。会处理的

标签: javascript angularjs node.js mongodb mongoose


【解决方案1】:

您可以使用以下聚合管道。

以下查询将$unwind tag_id 后跟$group 计数email$cond 运算符以计数unread 电子邮件。

db.collection.aggregate(
 {$unwind:{path:"$tag_id", preserveNullAndEmptyArrays:true}}, 
 {$group:{
    _id:"$tag_id", 
     count_email:{$sum:1},
     unread:{$sum:{$cond:[{$eq:["$unread", "false"]}, 0, 1]}}
    }
  }
);

【讨论】:

  • 感谢它为我工作,我想再问一件事,如果我有 tag_id "id": null 或没有 tag_id ,我想要那个 { "id": null , "count_email": 52, "未读": 35 }
  • 我们可以在不使用 $wind 的情况下找到相同的输出吗,因为我使用的是 mongo 3.0 版本,而且我有很多项目使用 3.0 版@veeram
  • 你可能不得不使用 map reduce。我认为值得为 3.0 版本创建单独的问题。
  • 你能告诉我如何处理 3.0 版
  • 你也可以检查一下吗,我已经为这个stackoverflow.com/questions/44015900/…创建了一个单独的问题
猜你喜欢
  • 2023-03-20
  • 2021-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-18
  • 2021-09-03
  • 2023-01-14
  • 2020-04-21
相关资源
最近更新 更多