社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  MongoDB

如何在MongoDB中获得数组字段值的不同组合[duplicate]

Lior Magen • 5 年前 • 919 次点击  

我在和MongoDB玩,想知道如何做一个简单的

SELECT province, COUNT(*) FROM contest GROUP BY province

但我似乎无法用聚合函数来解决这个问题。我可以用一些非常奇怪的组语法

db.user.group({
    "key": {
        "province": true
    },
    "initial": {
        "count": 0
    },
    "reduce": function(obj, prev) {
        if (true != null) if (true instanceof Array) prev.count += true.length;
        else prev.count++;
    }
});

但是有没有一种更简单/更快的方法来使用聚合函数呢?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/53510
文章 [ 7 ]  |  最新文章 5 年前
Riha
Reply   •   1 楼
Riha    6 年前

对我有用的Mongo shell命令:

db.getCollection(<collection_name>).aggregate([{"$match": {'<key>': '<value to match>'}}, {"$group": {'_id': {'<group_by_attribute>': "$group_by_attribute"}}}])
prule
Reply   •   2 楼
prule    10 年前

这类查询对我有效:

 db.events.aggregate({$group: {_id : "$date", number:  { $sum : 1} }} )

http://docs.mongodb.org/manual/tutorial/aggregation-with-user-preference-data/

MattM
Reply   •   3 楼
MattM    6 年前

$sortByCount 聚合。

根据指定表达式的值对传入文档进行分组,然后计算每个不同组中文档的计数。

https://docs.mongodb.com/manual/reference/operator/aggregation/sortByCount/

db.contest.aggregate([
    { $sortByCount: "$province" }
]);
André
Reply   •   4 楼
André    7 年前

此外,如果需要限制分组,可以使用:

db.events.aggregate( 
    {$match: {province: "ON"}},
    {$group: {_id: "$date", number: {$sum: 1}}}  
)
Eugene Sunic KitkatJohn
Reply   •   5 楼
Eugene Sunic KitkatJohn    6 年前

如果需要按多个列分组,请遵循此模型。在这里,我正在通过 status type :

  db.BusinessProcess.aggregate({
    "$group": {
        _id: {
            status: "$status",
            type: "$type"
        },
        count: {
            $sum: 1
        }
    }
   })
csharpbd
Reply   •   6 楼
csharpbd    8 年前

我需要一些基于聚合函数结果的额外操作。最后在MongoDB中找到了聚合函数和基于结果的操作的解决方案。我有一个收藏 Request request, source, status, requestDate .

按计数的单字段分组:

db.Request.aggregate([
    {"$group" : {_id:"$source", count:{$sum:1}}}
])

多个字段按计数分组:

db.Request.aggregate([
    {"$group" : {_id:{source:"$source",status:"$status"}, count:{$sum:1}}}
])

db.Request.aggregate([
    {"$group" : {_id:{source:"$source",status:"$status"}, count:{$sum:1}}},
    {$sort:{"_id.source":1}}
])

多个字段按计数分组,并使用计数排序:

db.Request.aggregate([
    {"$group" : {_id:{source:"$source",status:"$status"}, count:{$sum:1}}},
    {$sort:{"count":-1}}
])
Steven Anand Jayabalan
Reply   •   7 楼
Steven Anand Jayabalan    11 年前

这样做比较容易 aggregate

db.contest.aggregate([
    {"$group" : {_id:"$province", count:{$sum:1}}}
])