如何解决 MongoDB 溢出排序阶段错误?

How can I solve the MongoDB Overflow sort stage error?

我在 Windows 7(64 位)中使用 MongoDB 2.6.7 和 MongoDB C# 驱动程序 1.10.0,我遇到以下错误:

MongoDB.Driver.MongoQueryException: QueryFailure flag was getMore runner error: Overflow sort stage buffered data usage of 33554527 bytes exceeds internal limit of 33554432 bytes (response was { "$err" : "getMore runner error: Overflow sort stage buffered data usage of 33554527 bytes exceeds internal limit of 33554432 bytes", "code" : 17406 }).

我在 C# 中 运行 的查询是:

var query = Query<User>.EQ(c => c.GroupId, groupId);

return Collection.Find(query)
                 .SetSortOrder(SortBy.Ascending(User.ID))
                 .SetSkip(page * records)
                 .SetLimit(records)
                 .ToList();

我正在为 GroupId 属性 使用单个索引并且 ID(具有 _id 值)属性 具有默认索引。

我看到 MongoDB 中有一个相关的错误:

https://jira.mongodb.org/browse/SERVER-14174

如何解决这个错误?

您强调的服务器问题与实际无关。您遇到的错误表示内存中排序的数据过多 (>32Mb)。添加适当的索引应该可以解决此问题。看起来您的用户集合应该在 { groupId:1, _id:1}.

上有一个复合索引

复合键的顺序绝对重要。有关一些有用的背景阅读,请参阅:Optimizing MongoDB Compound Indexes.