当前位置: 首页 > 知识库问答 >
问题:

MongoDB$匹配$组查询慢

蒙化
2023-03-14

所以我对大约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的内存限制,但不允许外部排序。通过允许磁盘使用:真来选择加入。

共有1个答案

左丘成业
2023-03-14
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 中的运算符。然后将它与find一起使用,以使您的请求更快,可以使用方法:使用它,mongoDB将返回JS对象而不是Mongoose模型/对象。 然后,您可以在结果数组上使用方法: 希望对您有帮助, 最好的问候

  • 我和同事们有如下计划 所以我们想要的是所有在特定labID范围内匹配的文档,结果输出中只有在数组(“userlevels”)中匹配的字段。 比方说,如果我们想要集合中所有匹配的文档,范围在$gt 100到LT 200之间,那么应该有以下所需的输出。 我试过的 它会回复与lab_id(100到200)范围内的文档匹配的所有文档,但会在用户级别回复lab_id。

  • 我有一个集合,其中包含具有以下结构的文档: 我想在1个查询中获取存在或等于的所有文档。即与列表中的键匹配的文档。 在MongoDB中有没有办法做到这一点?

  • 本文向大家介绍MongoDB精确数组匹配,包括了MongoDB精确数组匹配的使用技巧和注意事项,需要的朋友参考一下 对于精确的数组匹配,只需在MongoDB中使用。让我们创建一个包含文档的集合- 在方法的帮助下显示集合中的所有文档- 这将产生以下输出- 这是对MongoDB数组匹配的查询- 这将产生以下输出-

  • 来自< code>$elementMatch的MongoDB文档: $elemMatch运算符将包含数组字段的文档与至少一个与所有指定查询条件匹配的元素匹配。 但是,如何将包含数组字段的文档与与查询匹配的所有元素进行匹配? 例如,我有这样的文档: 我需要匹配所有具有所有 如果我使用以下查询: 该文档将被匹配,因为至少有一个价格 我也试过这个,但它似乎不工作: 有没有办法排除查看所有价格而不是至少一

  • 问题内容: 我想知道如何查询字段以完全匹配字符串。 我实际上正在尝试这样查询: 会返回以开头的所有字符串。 问题答案: 我遇到了类似的问题,而ifound修复了“ .raw”-在您的示例中,请尝试