Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 计数字符串在多个文档中与字段匹配的次数_Mongodb_Mongodb Query_Database - Fatal编程技术网

Mongodb 计数字符串在多个文档中与字段匹配的次数

Mongodb 计数字符串在多个文档中与字段匹配的次数,mongodb,mongodb-query,database,Mongodb,Mongodb Query,Database,假设我有许多文档如下所示: { 'domain': 'www.stackoverflow.com', 'time': 1380860676457 } { 'domain': 'www.google.com', 'time': 1380860678001 } { 'domain': 'www.stackoverflow.com', 'time': 1380860657233 } db.cls.aggregate( {$group:{_id:"$domain", coun

假设我有许多文档如下所示:

{
  'domain': 'www.stackoverflow.com',
  'time': 1380860676457
}
{
  'domain': 'www.google.com',
  'time': 1380860678001
}
{
  'domain': 'www.stackoverflow.com',
  'time': 1380860657233
}
db.cls.aggregate(
 {$group:{_id:"$domain", count: {$sum : 1}}},
 {$project:{_id:0, domain:"$_id", count:"$count"}}
)
获得以下输出的最佳方式是什么

{
  'domain': 'www.stackoverflow.com',
  'count': 2
}

如果初始集合包含(比如)一百万个或更多文档,是否有任何性能方面的考虑因素(存储日志的不同方式?)

您可以使用聚合。比如:

db.sites.aggregate([{
  $group: {
    _id: '$domain',
    count: {$sum: 1}
  }
}]);
这将在“域”字段上分组,并为找到的每个文档的计数添加1。要使其看起来像您想要的输出,还可以向聚合中添加投影操作:

$project: {
  domain: '$_id',
  count: 1,
  _id: 0
}

您可以使用聚合。比如:

db.sites.aggregate([{
  $group: {
    _id: '$domain',
    count: {$sum: 1}
  }
}]);
这将在“域”字段上分组,并为找到的每个文档的计数添加1。要使其看起来像您想要的输出,还可以向聚合中添加投影操作:

$project: {
  domain: '$_id',
  count: 1,
  _id: 0
}

您需要的只是按
分组和求和块。您可以通过以下收集方法完成此操作:

{
  'domain': 'www.stackoverflow.com',
  'time': 1380860676457
}
{
  'domain': 'www.google.com',
  'time': 1380860678001
}
{
  'domain': 'www.stackoverflow.com',
  'time': 1380860657233
}
db.cls.aggregate(
 {$group:{_id:"$domain", count: {$sum : 1}}},
 {$project:{_id:0, domain:"$_id", count:"$count"}}
)
首先,
$group
为您提供:

{
    "result" : [
            {
                    "_id" : "www.google.com",
                    "count" : 1
            },
            {
                    "_id" : "www.stackoverflow.com",
                    "count" : 2
            }
    ],
    "ok" : 1
}
{
    "result" : [
            {
                    "count" : 1,
                    "domain" : "www.google.com"
            },
            {
                    "count" : 2,
                    "domain" : "www.stackoverflow.com"
            }
    ],
    "ok" : 1
}
第二个,
$project
为您提供:

{
    "result" : [
            {
                    "_id" : "www.google.com",
                    "count" : 1
            },
            {
                    "_id" : "www.stackoverflow.com",
                    "count" : 2
            }
    ],
    "ok" : 1
}
{
    "result" : [
            {
                    "count" : 1,
                    "domain" : "www.google.com"
            },
            {
                    "count" : 2,
                    "domain" : "www.stackoverflow.com"
            }
    ],
    "ok" : 1
}
或者您也可以通过收集方法来完成:


为了加快进程,您应该在
字段上有一个索引,正如@AnujAneja所提到的

您需要的只是按
域进行分组和求和块。您可以通过以下收集方法完成此操作:

{
  'domain': 'www.stackoverflow.com',
  'time': 1380860676457
}
{
  'domain': 'www.google.com',
  'time': 1380860678001
}
{
  'domain': 'www.stackoverflow.com',
  'time': 1380860657233
}
db.cls.aggregate(
 {$group:{_id:"$domain", count: {$sum : 1}}},
 {$project:{_id:0, domain:"$_id", count:"$count"}}
)
首先,
$group
为您提供:

{
    "result" : [
            {
                    "_id" : "www.google.com",
                    "count" : 1
            },
            {
                    "_id" : "www.stackoverflow.com",
                    "count" : 2
            }
    ],
    "ok" : 1
}
{
    "result" : [
            {
                    "count" : 1,
                    "domain" : "www.google.com"
            },
            {
                    "count" : 2,
                    "domain" : "www.stackoverflow.com"
            }
    ],
    "ok" : 1
}
第二个,
$project
为您提供:

{
    "result" : [
            {
                    "_id" : "www.google.com",
                    "count" : 1
            },
            {
                    "_id" : "www.stackoverflow.com",
                    "count" : 2
            }
    ],
    "ok" : 1
}
{
    "result" : [
            {
                    "count" : 1,
                    "domain" : "www.google.com"
            },
            {
                    "count" : 2,
                    "domain" : "www.stackoverflow.com"
            }
    ],
    "ok" : 1
}
或者您也可以通过收集方法来完成:


为了加快进程,您应该在
字段上有一个索引,正如@AnujAneja所提到的

您可以对此使用聚合函数,并且可以在域字段上具有索引。您可以对此使用聚合函数,并且可以在域字段上具有索引。