日期:2014-05-16  浏览次数:20433 次

Asp.net连接Mongodb查询时没有限制条数,造成数据量特别大

这两天连mongodb的服务器老是有问题,打开任务管理器一看,内网的带宽打的是相当的高,服务器上只有调mongodb的页面,调mongodb走的是内网,所以应该是mongodb传输的数据量太大的问题,因为当连接数只有30个左右的时候,mongostat里的netout居然仍然有4M、5M左右,这个也太夸张了,于是仔细排查了下项目的代码,终于找到了问题的症结。

修改前:

documnetFilterResult = collection.Find(filterDocument).Sort("Date", IndexOrder.Descending).Documents.Take(60).ToList<Document>();

修改后:

documnetFilterResult = collection.Find(filterDocument).Sort("Date", IndexOrder.Descending).Limit(60).Documents.ToList<Document>();

两者乍一看没什么区别,都是按照日期排好序然后取前60条,但是却有本质的区别:

修改前的代码查询mongodb的操作是collection.Find(filterDocument).Sort("Date", IndexOrder.Descending).Documents

修改后的代码查询mongodb的操作是collection.Find(filterDocument).Sort("Date", IndexOrder.Descending).Limit(60).Documents

可以看出,修改前的代码要比修改后的代码的查询结果要大的多(修改前是全部,修改是全部中的前60条),虽然修改前的最后也做了条数限制,但是是得到数据后再处理的。

1楼zhifengmuyu昨天 17:56
大师又有新发现了。
Re: kaosini26分钟前
回复zhifengmuyun不敢当!修改后项目果然运行正常了。