0

直升机,

我有一个包含大约 20k 个文档的 mongodb 集合。删除的文档也存储在集合中,这意味着它们是“软”删除的。

现在,我想根据“状态”键查询文档。状态可以是“打开”、“关闭”或“已删除”。我需要状态为“已关闭”的记录

我看到满足我标准的文档数量只有 25 个。但是,扫描的文档(应用索引后)为 18k。

因此,我的查询大约需要 2 分钟才能执行,而且很多时候会超时。

我的第一个问题是: 1. 对 20k 文档执行查询是否应该花费这么多时间?20k不是一个很大的数字吗?2. 如果可以的话,有人可以指导我进一步优化查询吗?将已删除的记录推送到单独的存档集合中是我最不想做的事情。

这是我当前的查询:

**

db.collectionname.find({$and: [{ $and: [{ status: {$ne: 'open'} },{ status: {$ne: 'deleted'} }] }, 
							{ 'submittedDate': { $gte: new Date("2019-02-01T00:00:00.000Z"), $lte: new Date("2019-02-02T00:00:00.000Z") } }
						 ] })

**

4

1 回答 1

0

您必须有一个字段索引为{status: 1}. 将索引替换为复合索引{status: 1, submittedDate: 1}将提高您的性能。如果索引正确,20k 什么都不是。如果您只有 3 个状态,请按如下方式替换您的查询。

db.collectionname.find({status: 'closed',
    'submittedDate': { $gte: new Date("2019-02-01T00:00:00.000Z"), 
            $lte: new Date("2019-02-02T00:00:00.000Z") }})
于 2019-03-05T13:55:27.693 回答