MongoDB查询部分忽略限制

我正在运行一个查询,尝试从一个集合中获取25条logging,每条logging大约有3-4k条logging。 我需要这些由一个特定的Id,上升。 所以我创build了这个查询:

var collection = mongoDb.collection('matches'); collection .find({ matchId: {$exists:true} }) .sort({matchId: 1}) .limit(25) .toArray(function(err, docs) { /* error management */ doIf(isVerbose, logger.info, 'Found {magenta:%s} records.', docs.length); }); 

我遇到的奇怪的问题是它返回了22条logging。 当我交换方向(asc到desc)时,它返回了全部25。

我查了一下,发现如果我为search增加一个索引可能会更好,所以我将它添加到了mongo CLI中:

 db.matches.createIndex({matchId:1}); 

并在我的节点应用程序中再次进行testing。 这次(以及之后的所有尝试),我的查询返回了45条logging。

如果我把这个限制改为20,21或22,那么他们都会很好地回复–23个起始似乎会返回一个大于限制的数量。

奇怪的是,我可以在mongo CLI中运行这个查询,它将按照预期返回25条logging。

我想知道我是否在这里失去了一些东西?

如果有什么价值的话,下面是我collections的统计数据:

 > db.matches.stats(); { "ns" : "[database].matches", "count" : 3678, "size" : 910236192, "avgObjSize" : 247481, "numExtents" : 16, "storageSize" : 1069953024, "lastExtentSize" : 280522752, "paddingFactor" : 1, "paddingFactorNote" : "paddingFactor is unused and unmaintained in 3.0. It remains hard coded to 1.0 for compatibility only.", "userFlags" : 1, "capped" : false, "nindexes" : 2, "totalIndexSize" : 245280, "indexSizes" : { "_id_" : 130816, "matchId_1" : 114464 }, "ok" : 1 } 

编辑:在评论中请求。

以下是节点应用程序的解释(返回45个结果):

 { queryPlanner: { plannerVersion: 1, namespace: '[db].matches', indexFilterSet: false, parsedQuery: { matchId: [Object] }, winningPlan: { stage: 'LIMIT', limitAmount: 0, inputStage: { stage: 'FETCH', filter: { matchId: [Object] }, inputStage: { stage: 'IXSCAN', keyPattern: [Object], indexName: 'matchId_1', isMultiKey: false, direction: 'forward', indexBounds: [Object] } } } rejectedPlans: [] }, executionStats: { executionSuccess: true, nReturned: 1, executionTimeMillis: 0, totalKeysExamined: 1, totalDocsExamined: 1, executionStages: { stage: 'LIMIT', nReturned: 1, executionTimeMillisEstimate: 0, works: 2, advanced: 1, needTime: 0, needFetch: 0, saveState: 0, restoreState: 0, isEOF: 1, invalidates: 0, limitAmount: 0, inputStage: [Object] }, allPlansExecution: [] }, serverInfo: { host: '[Host Name]', port: 27017, version: '3.0.2', gitVersion: '6201872043ecbbc0a4cc169b5482dcf385fc464f' } } 

这是从terminal(返回25)

  "queryPlanner" : { "plannerVersion" : 1, "namespace" : "[db].matches", "indexFilterSet" : false, "parsedQuery" : { "$and" : [ ] }, "winningPlan" : { "stage" : "LIMIT", "limitAmount" : 25, "inputStage" : { "stage" : "PROJECTION", "transformBy" : { "$limit" : 25 }, "inputStage" : { "stage" : "FETCH", "inputStage" : { "stage" : "IXSCAN", "keyPattern" : { "matchId" : 1 }, "indexName" : "matchId_1", "isMultiKey" : false, "direction" : "forward", "indexBounds" : { "matchId" : [ "[MinKey, MaxKey]" ] } } } } }, "rejectedPlans" : [ ] }, "serverInfo" : { "host" : "[hostName]", "port" : 27017, "version" : "3.0.2", "gitVersion" : "6201872043ecbbc0a4cc169b5482dcf385fc464f" }, "ok" : 1 

}