检查版本:
简化工作示例:
type Article.t = {
int id
}
database nadzieja_test {
Article.t /article[{id}]
}
module Model {
function get_articles() {
/nadzieja_test/article[limit 2].{id}
|> DbSet.iterator
|> Iter.to_list
|> List.mapi(function(i, item) {
s = "get_articles()#{i}: id={item.id}" + "\n"
jlog(s)
s
}, _)
}
}
function page() {
[1,2,3,4,5,6,7,8,9]
|> List.iter(
function (id) {
/nadzieja_test/article[{~id}] = {~id}
}, _)
<pre>{Model.get_articles()}</pre>
}
Server.start(Server.http, { title: "Test", ~page })
查询[limit 2]
会返回所有文档。
现实生活中的问题显然更复杂(文档存储和查询)但导致相同的行为。原始集合使用索引,但删除它们并没有消除问题。
测试前不存在数据库和集合。
我盯着使用db.setProfilingLevel(2)
在mongo控制台中启用性能分析(我的应用程序在启用和禁用性能分析的情况下进行了测试)。获得的分析结果:
> db.system.profile.find({"op":"query","ns":"nadzieja_test.article"}).sort({ts:-1}).pretty()
{
"op" : "query",
"ns" : "nadzieja_test.article",
"query" : {
},
"cursorid" : 152008290160,
"ntoreturn" : 2,
"ntoskip" : 0,
"nscanned" : 2,
"nscannedObjects" : 2,
"keyUpdates" : 0,
"numYield" : 0,
"lockStats" : {
"timeLockedMicros" : {
"r" : NumberLong(278),
"w" : NumberLong(0)
},
"timeAcquiringMicros" : {
"r" : NumberLong(11),
"w" : NumberLong(8)
}
},
"nreturned" : 2,
"responseLength" : 88,
"millis" : 0,
"execStats" : {
"type" : "PROJECTION",
"works" : 3,
"yields" : 0,
"unyields" : 0,
"invalidates" : 0,
"advanced" : 2,
"needTime" : 0,
"needFetch" : 0,
"isEOF" : 0,
"children" : [
{
"type" : "COLLSCAN",
"works" : 3,
"yields" : 0,
"unyields" : 0,
"invalidates" : 0,
"advanced" : 2,
"needTime" : 1,
"needFetch" : 0,
"isEOF" : 0,
"docsTested" : 2,
"children" : [ ]
}
]
},
"ts" : ISODate("2015-01-06T11:05:26.170Z"),
"client" : "127.0.0.1",
"allUsers" : [ ],
"user" : ""
}
请注意,ntoreturn
和nreturned
的值均为2
。我不确定这个Opa或Mongo问题。除了从DB获取所有文档和过滤客户端(到许多文档)之外的任何变通方法都是受欢迎的!