Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.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
Database 在$facet中使用$sort和$limit时,Mongo聚合速度变慢_Database_Mongodb_Performance_Wiredtiger - Fatal编程技术网

Database 在$facet中使用$sort和$limit时,Mongo聚合速度变慢

Database 在$facet中使用$sort和$limit时,Mongo聚合速度变慢,database,mongodb,performance,wiredtiger,Database,Mongodb,Performance,Wiredtiger,我注意到,至少在概念上,在看起来相同的集合中存在巨大的性能差异。测试是在一个简单的集合结构上进行的,该集合结构有一个_id、一个名称和一个createdAt,但其中有2000万个。createdAt上有一个索引。它托管在mlab集群上,版本为3.6.9 WiredTiger 我正在尝试使用聚合实现一个简单的分页,我知道我可以使用find和limit,但我喜欢向管道添加更多元素,我给出的示例非常精练 db.getCollection(“runnablecall”).aggregate([ { $f

我注意到,至少在概念上,在看起来相同的集合中存在巨大的性能差异。测试是在一个简单的集合结构上进行的,该集合结构有一个_id、一个名称和一个createdAt,但其中有2000万个。createdAt上有一个索引。它托管在mlab集群上,版本为3.6.9 WiredTiger

我正在尝试使用聚合实现一个简单的分页,我知道我可以使用find和limit,但我喜欢向管道添加更多元素,我给出的示例非常精练

db.getCollection(“runnablecall”).aggregate([
{
$facet:{
文件:[
{$sort:{createdAt:-1}},
{$限额:25},
{$skip:0},
],
页面信息:[
{$group:{{u id:null,总计:{$sum:1}}
}
],
}
}                           
])
这几乎需要40秒。现在,如果我将
$sort
$limit
移动到刻面之外,则需要
0.042s

db.getCollection(“runnablecall”).aggregate([
{$sort:{createdAt:-1}},
{$限额:25},
{
$facet:{
文件:[
{$skip:0},
],            
页面信息:[
{ 
$group:{u id:null,总计:{$sum:1}
} 
]}
},                           
])

最后,
page\u info
facet没有任何区别,我可以毫无区别地取出它,我只是把它留在里面,因为我喜欢使用它。我知道如何使用两个查询来解决这个问题,一个是计数,一个是聚合,没有
$facet
。我只是想理解为什么会发生这种情况。

第一次聚合没有使用索引。第二个聚合使用索引并过滤前25个文档,然后再进入
$facet
。您可以添加
explain('executionStats')
以查看查询计划和索引用法。比如说,

db.getCollection("runnablecalls").explain('executionStats').aggregate([
         {
          $facet: {
            docs: [
                { $sort:  {createdAt: -1} },
                { $limit:  25 },
                { $skip:  0 },                                
            ],
            page_info: [
              { $group: { _id: null, total: { $sum: 1 } } 
              }
            ],
          }
        }                           
      ])

你是说$facet没有使用索引吗?我只是不明白为什么会这样?