查询包含时MongoDB超时!==

本文关键字:超时 MongoDB 包含时 查询 | 更新日期: 2023-09-27 18:29:13

我正在运行一个mapreduce来生成关于时事通讯活动的报告。

要运行特定时事通讯的报告,我使用:

var query = Query.And(
                    Query.EQ("NewsletterId", BsonInt32.Create(newsletterId)),
                    Query.GTE("DateAdded", BsonDateTime.Create(startDate)).LTE(BsonDateTime.Create(endDate))
                );

我现在希望能够获得所有时事通讯的电子邮件活动的汇总报告(使用相同的mapreduce,但只是更改查询)。为此,我使用:

var query = Query.And(
                    Query.Where(new BsonJavaScript("this.NewsletterId !== null")),
                    Query.GTE("DateAdded", BsonDateTime.Create(startDate)).LTE(BsonDateTime.Create(endDate))
                        );

我有一个索引集,其中包括NewsleetinId和DateAdded,我认为这在第一个查询中使用,但在第二个查询中没有使用,这导致它超时。

我可以做什么样的优化来防止查询超时?

查询包含时MongoDB超时!==

请改用$exists条件。(10gen C#驱动程序中的Exists()

在MongoDB中,$where对于大型集合将是缓慢的。从本质上讲,它不使用索引。它只是反序列化每个对象并计算子句。

出于完整性的目的,如果您的日期范围包含的文档相对较少,您可以通过切换$and子句中组件的顺序来很好地优化它。这样,您将在日期范围内的记录上运行慢速操作,而不是在所有记录上运行低速操作。