我在MongoDB C#Driver 1.10.0中使用Windows 7(64位)中的MongoDB 2.6.7,我遇到以下错误:
MongoDB.Driver.MongoQueryException:QueryFailure标志是getMore runner错误:溢出排序阶段缓冲数据使用量33554527字节超过内部限制33554432字节(响应是{" $ err":" getMore runner错误:溢出排序阶段缓冲数据使用33554527字节超过内部限制33554432字节","代码":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
如何解决此错误?
答案 0 :(得分:3)
您突出显示的服务器问题并不真正相关。您遇到的错误表示内存排序的数据太多(> 32Mb)。添加适当的索引应解决此问题。看起来您的User集合应该在{ groupId:1, _id:1}
上有一个复合索引。
复合键中的顺序绝对重要。有关一些有用的背景阅读,请参阅:Optimizing MongoDB Compound Indexes。