我对mongoDB的Restfull接口有一些问题。
我已提交此查询 - > http://127.0.0.1:28017/db/collection/?limit=0
(我使用limit = 0因为我想通过ajax请求找到我的所有结果),
行数方面的结果是“total_rows”:38185。
但是如果我在shell中执行db.collection.count(),结果是496519。
为什么我有这些差异?是否可以通过ajax请求获得相同的结果?
提前感谢您的帮助。
答案 0 :(得分:1)
我确信结果不受行数或MongoDB的影响,但表示是Webserver(在创建任务管理员时)。它可能是Web服务器响应中断的有效负载大小,如HTTP错误413(实体到更大)。
在我的测试中,我看到日志中的条目为" [websvr] killcursors:找到1&1;#34;。这将终止客户端(在Web服务器中)和MongoDB之间打开的游标。大多数驱动程序不需要调用OP_KILL_CURSORS,因为MongoDB默认定义了10分钟的超时。
返回测试我得出结论,Web服务器(内置MongoDB)响应的大小有效载荷限制在38~40MB。让我展示一下我的分析。
我创建了一个包含1,260,000个文档的集合。在REST Web界面中,查询结果为total_rows:379,677(或avgObjSize * total_rows = 38MB)。
db.manyrows.stats()
{
"ns" : "forum.manyrows",
"count" : 1260000,
"size" : 125101640,
"avgObjSize" : 99.28701587301587,
"storageSize" : 174735360,
"numExtents" : 12,
"nindexes" : 1,
"lastExtentSize" : 50798592,
"paddingFactor" : 1,
"systemFlags" : 1,
"userFlags" : 0,
"totalIndexSize" : 48753488,
"indexSizes" : {
"_id_" : 48753488
},
"ok" : 1
}
====== 网页输出
{"total_rows" : 379677 , "query" : {} , "millis" : 6793}
继续...删除/删除一些收集文件以适合38MB。在所有文档中执行新查询结果,结果为379642或37MB的379642。
> db.manyrows.stats()
{
"ns" : "forum.manyrows",
"count" : 379678,
"size" : 38172128,
"avgObjSize" : 100.53816128403543,
"storageSize" : 174735360,
"numExtents" : 12,
"nindexes" : 1,
"lastExtentSize" : 50798592,
"paddingFactor" : 1,
"systemFlags" : 1,
"userFlags" : 0,
"totalIndexSize" : 12329408,
"indexSizes" : {
"_id_" : 12329408
},
"ok" : 1
}
=== 网页输出
{"total_rows" : 379678 , "query" : {} , "millis" : 27325}
其他收藏品的新样本:结果39MB(“avgObjSize&#34 ;:3440.35 *" total_rows":11395 = 39MB)
> db.messages.stats()
{
"ns" : "enron.messages",
"count" : 120477,
"size" : 414484160,
"avgObjSize" : 3440.3592386928626,
"storageSize" : 518516736,
"numExtents" : 14,
"nindexes" : 2,
"lastExtentSize" : 140619776,
"paddingFactor" : 1,
"systemFlags" : 1,
"userFlags" : 1,
"totalIndexSize" : 436434880,
"indexSizes" : {
"_id_" : 3924480,
"body_text" : 432510400
},
"ok" : 1
}
===网络输出:
{ "&TOTAL_ROWS#34; :11395, "查询" :{}, "米利斯" :2956 }
您可以尝试使用像Bottle这样的微框架进行查询。