【问题标题】:Need some help regarding my mongodb aggregate query [duplicate]需要一些关于我的 mongodb 聚合查询的帮助 [重复]
【发布时间】:2019-10-17 09:43:18
【问题描述】:

我有以下聚合查询,用于查询大约 9+ 十万条记录:

db.getCollection('Job').aggregate([
  {
    "$sort": {
      "lastUpdatedAt": 1
    }
  },
  {
    "$match": {
      "$and": [
        { "lastUpdatedAt": { "$gte": new Date("2019-04-01") } },
        {
          "$or": [
            { "job.scheduledEndTime": { "$lte": new Date("2019-07-15") } },
            { "lastUpdatedAt": { "$lte": new Date("2019-07-15") } }
          ]
        },
        { "reduced": null }
      ]
    }
  },
  { "$project": { "_id": 1 } },
  { "$sort": { "_id": 1 } },
  { "$limit": 100 }
])

在上面的查询中,我创建了复合索引,每个字段也有一个单独的索引:

{ "lastUpdatedAt": -1, "job.scheduledEndTime": -1, "reduced": 1 } 

这是一个稀疏索引,因为一旦我从上述查询中获得结果并在其中执行一些操作后,我设置的所有文档中都没有缩减字段。

这是 .explain 告诉我的:https://pastebin.com/ERgChr2N

上面的查询大约需要 100 到 130 秒才能返回结果,所以有什么方法可以优化上面的查询。

提前致谢。

【问题讨论】:

    标签: mongodb aggregate


    【解决方案1】:

    大家好,我更改了我的查询以找到一个,我在 1 秒内得到所有结果,这是我的查找查询:

    db.getCollection('Job').find({ $and: [ 
        { lastUpdatedAt: {$gte: new Date("2019-04-01")} }, 
        { "$or": [
            {"job.scheduledEndTime":{"$lte": new Date("2019-07-15")}},
            {"lastUpdatedAt":{"$lte": new Date("2019-07-15")}}
        ] },
        { reduced: null }
    ]}, {_id: 1}).sort({_id: 1}).limit(100)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-18
      • 1970-01-01
      • 2020-09-08
      • 1970-01-01
      相关资源
      最近更新 更多