在mongodb计算这个

时间:2013-11-16 10:04:30

标签: mongodb

我在orders数据库中有一个名为main的集合。要计算所有订单,我输入

use main
db.orders.count()

所有订单文件都有customer_email_address。每个客户都可以有很多订单。

如何计算所有唯一的电子邮件地址?

另外,我如何计算所有不在my_own_address@gmail.commy_coworkers_address@gmail.com等特定电子邮件地址列表中的唯一电子邮件地址(我和我的同事已经下了一些测试订单,我们'我想忽略那些。)

1 个答案:

答案 0 :(得分:1)

您可以使用简单的不同查询

db.orders.distinct(
    'customer_email_address',
    {customer_email_address:
        {$nin: ["my_own_address@gmail.com", "my_coworkers_address@gmail.com"]}
    }
).length

使用聚合框架:

pipeline = [
    {
        "$match" : {
            "customer_email_address" : {
                "$nin" : [
                    "my_own_address@gmail.com",
                    "my_coworkers_address@gmail.com"
                ]
            }
        }
    },
    {
        "$group" : {
            "_id" : "$customer_email_address",
            "count" : {
                "$sum" : 1
            }
        }
    },
    {
        "$group" : {
            "_id" : null,
            "count" : {
                "$sum" : 1
            }
        }
    }
]
db.orders.aggregate(pipeline).result[0].count