C# 如何解决MongoDB溢出排序阶段错误?
我正在使用Windows 7中的MongoDB 2.6.7(64位)和MongoDB C#Driver 1.10.0,我遇到以下错误: MongoDB.Driver.MongoQueryException:QueryFailure标志为getMore runner错误:33554527字节的溢出排序阶段缓冲数据使用量超过33554432字节的内部限制(响应为{“$err”:“getMore runner错误:33554527字节的溢出排序阶段缓冲数据使用量超过33554432字节的内部限制”,“代码”:17406}) 我在C#中运行的查询是:C# 如何解决MongoDB溢出排序阶段错误?,c#,mongodb,overflow,mongodb-query,C#,Mongodb,Overflow,Mongodb Query,我正在使用Windows 7中的MongoDB 2.6.7(64位)和MongoDB C#Driver 1.10.0,我遇到以下错误: MongoDB.Driver.MongoQueryException:QueryFailure标志为getMore runner错误:33554527字节的溢出排序阶段缓冲数据使用量超过33554432字节的内部限制(响应为{“$err”:“getMore runner错误:33554527字节的溢出排序阶段缓冲数据使用量超过33554432字节的内部限制”,“
var query=query.EQ(c=>c.GroupId,GroupId);
返回集合。查找(查询)
.SetSortOrder(按升序排序(用户ID))
.SetSkip(第*页记录)
.SetLimit(记录)
.ToList();
我对GroupId属性使用单个索引,并且ID(带有_ID值)属性具有默认索引
我发现MongoDB中有一个相关的bug:
如何解决此错误?您强调的服务器问题与此无关。您遇到的错误表明内存排序的数据太多(>32Mb)。添加适当的索引可以解决此问题。看起来您的用户集合应该在
{groupId:1,\u id:1}
上有一个复合索引
复合键的顺序绝对重要。有关一些有用的背景资料,请参阅:。您突出显示的服务器问题实际上并不相关。您遇到的错误表明数据太多(>32Mb),无法访问。添加适当的索引可以解决此问题。看起来您的用户集合应该在
{groupId:1,\u id:1}
上有一个复合索引。很抱歉,我使用了顺序相反的组合键:{u id:1,groupId:1},但它不起作用。我按照你的命令{groupId:1,{u id:1}做了,成功了!非常感谢。
var query = Query<User>.EQ(c => c.GroupId, groupId);
return Collection.Find(query)
.SetSortOrder(SortBy.Ascending(User.ID))
.SetSkip(page * records)
.SetLimit(records)
.ToList();