MongoDB $match $group 查询慢

Posted

技术标签:

【中文标题】MongoDB $match $group 查询慢【英文标题】:MongoDB $match $group query slow 【发布时间】:2020-03-21 07:05:24 【问题描述】:

所以我对大约 500k 文档进行了以下查询,并且在数据库方面确实很慢:

db.collection('news').aggregate(
    [
      
        $match: 
          feeds:  $in: feeds ,
          createdAt:  $lte: lastPostDate ,
          deleted: 
            $exists: false
          
        
      ,
      
        $group: 
          _id:  title: '$title' ,
          id:  $first: '$_id' ,
          title:  $addToSet: '$title' ,
          source:  $first: '$source' ,
          shortid:  $first: '$shortid' ,
          stats:  $first: '$stats' ,
          log:  $first: '$log' ,
          createdAt:  $first: '$createdAt' ,
          feedUpdated:  $first: '$feedUpdated' ,
          media:  $first: '$media' ,
          title:  $first: '$title' 
        
      ,
       $sort: sort ,
      
        $skip: limit * (page - 1)
      ,
      
        $limit: limit * 1
      
    ],
    
      allowDiskUse: true,
      cursor: 
    
)

我知道 allowDiskUse 让它变慢了,但如果我禁用它,我会得到:

MongoError: 超出 $group 的内存限制,但不允许 外部排序。传递 allowDiskUse:true 以选择加入。

【问题讨论】:

【参考方案1】:
let aggregation = MongoSchemaModel.aggregate([]); 
aggregation.options =  allowDiskUse: true ; 
aggregation.exec((err, data) => );

let aggregation = MongoSchemaModel.aggregate([],  allowDiskUse: true );
aggregation.exec((err, data) => );

参考:- https://mkyong.com/mongodb/mongodb-sort-exceeded-memory-limit-of-104857600-bytes/

【讨论】:

以上是关于MongoDB $match $group 查询慢的主要内容,如果未能解决你的问题,请参考以下文章

使用 $match 和 $group 的 mongoDB 查询(过滤过去 24 小时记录的数据和具有 id 和计数的组)

MongoDB group count 慢(qbit)

MongoDB 查询超时异常 SocketTimeoutException

MongoDB关联查询

mongodb怎么查询数组中的值

MongoDb 聚合在 $group 中使用 $sortByCount