mongo组并根据条件进行计数

mongo组并根据条件进行计数

本文介绍了mongo组并根据条件进行计数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试对一组文档进行分组,并根据其值对它们进行计数.例如

I'm trying to group a set of documents and count them based on their value.For example

{ "_id" : 1, "item" : "abc1", "value" : "1" }
{ "_id" : 2, "item" : "abc1", "value" : "1" }
{ "_id" : 3, "item" : "abc1", "value" : "11" }
{ "_id" : 4, "item" : "abc1", "value" : "12" }
{ "_id" : 5, "item" : "xyz1", "value" : "2" }

在这里,我想按项目"进行分组,并返回一个计数,该值是值"大于10的倍数和小于10的多少倍.所以:

Here I would like to group by "item" and get in return a count how many times the "value" is bigger than 10 and how many times smaller. So:

{ "item": "abc1", "countSmaller": 2, "countBigger": 1}
{ "item": "xyz1", "countSmaller": 1, "countBigger": 0}

使用$ aggregate可以很容易地实现纯计数,但是如何获得上述结果?

A plain count could be easily achieved with $aggregate, but how can I achieve the above result?

推荐答案

您需要的是 $cond 运算符.一种获得想要的东西的方法是:

What you need is the $cond operator of aggregation framework. One way to get what you want would be:

db.foo.aggregate([
    {
        $project: {
            item: 1,
            lessThan10: {  // Set to 1 if value < 10
                $cond: [ { $lt: ["$value", 10 ] }, 1, 0]
            },
            moreThan10: {  // Set to 1 if value > 10
                $cond: [ { $gt: [ "$value", 10 ] }, 1, 0]
            }
        }
    },
    {
        $group: {
            _id: "$item",
            countSmaller: { $sum: "$lessThan10" },
            countBigger: { $sum: "$moreThan10" }
        }
    }
])

注意::我假设value为数字而不是字符串.

Note: I have assumed value to numeric rather than String.

输出:

{
        "result" : [
                {
                        "_id" : "xyz1",
                        "countSmaller" : 1,
                        "countBigger" : 0
                },
                {
                        "_id" : "abc1",
                        "countSmaller" : 2,
                        "countBigger" : 2
                }
        ],
        "ok" : 1
}

这篇关于mongo组并根据条件进行计数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-06 07:57