查询包含时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,我认为这在第一个查询中使用,但在第二个查询中没有使用,这导致它超时。
我可以做什么样的优化来防止查询超时?
请改用$exists
条件。(10gen C#驱动程序中的Exists()
)
在MongoDB中,$where
对于大型集合将是缓慢的。从本质上讲,它不使用索引。它只是反序列化每个对象并计算子句。
出于完整性的目的,如果您的日期范围包含的文档相对较少,您可以通过切换$and
子句中组件的顺序来很好地优化它。这样,您将在日期范围内的记录上运行慢速操作,而不是在所有记录上运行低速操作。