Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 当我想要更多/全部时,Mongoose将查询限制为1000个结果(从2.6.5迁移到3.1.2)_Node.js_Mongodb_Mongoose - Fatal编程技术网

Node.js 当我想要更多/全部时,Mongoose将查询限制为1000个结果(从2.6.5迁移到3.1.2)

Node.js 当我想要更多/全部时,Mongoose将查询限制为1000个结果(从2.6.5迁移到3.1.2),node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我正在将我的应用程序从Mongoose 2.6.5迁移到3.1.2,我遇到了一些意想不到的行为。也就是说,我注意到查询结果被自动限制为1000条记录,而其他几乎都是一样的。在我的代码(如下)中,我设置了一个值maxIvDataPoints,该值限制返回(并最终发送到客户端浏览器)的数据点的数量,该值在别处设置为1500。我使用计数查询来确定潜在结果的总数,然后使用计数和maxIvDataPoints的值来确定mod的值,使用后续mod来限制实际查询结果。我正在运行node 0.8.4和mongo

我正在将我的应用程序从Mongoose 2.6.5迁移到3.1.2,我遇到了一些意想不到的行为。也就是说,我注意到查询结果被自动限制为1000条记录,而其他几乎都是一样的。在我的代码(如下)中,我设置了一个值
maxIvDataPoints
,该值限制返回(并最终发送到客户端浏览器)的数据点的数量,该值在别处设置为1500。我使用计数查询来确定潜在结果的总数,然后使用计数和
maxIvDataPoints
的值来确定mod的值,使用后续mod来限制实际查询结果。我正在运行node 0.8.4和mongo 2.0.4,用coffeescript编写服务器端代码

在安装Mongoose3.1.x之前,代码按照我的要求运行,每次返回的数据点都不到1500个。安装3.1.2后,每次返回的数据点正好有1000个(假设指定范围内有1000多个数据点)。结果被截断,因此不再返回1001到1500的数据点

似乎在某个地方有一些设置控制着这种行为,但我在文档中、这里或Google组中找不到任何内容。我仍然是n00b的亲戚,所以我可能错过了一些明显的东西

DataManager::ivDataQueryStream = (testId, minTime, maxTime, callback) ->

    # If minTime and maxTime have been provided, set a flag to limit time extents of query
    unless isNaN(minTime)
    timeLimits = true

    # Load the max number of IV data points to be displayed from CONFIG
    maxIvDataPoints = CONFIG.maxIvDataPoints

    # Construct a count query to determine the number if IV data points in range
    ivCountQuery = TestDataPoint.count({})
    ivCountQuery.where "testId", testId

    if timeLimits
        ivCountQuery.gt "testTime", minTime
        ivCountQuery.lt "testTime", maxTime

    ivCountQuery.exec (err, count) ->

        ivDisplayQuery = TestDataPoint.find({})
        ivDisplayQuery.where "testId", testId

        if timeLimits
            ivDisplayQuery.gt "testTime", minTime
            ivDisplayQuery.lt "testTime", maxTime

        # If the data set is too large, use modulo to sample, keeping the total data series
        # for display below maxIvDataPoints
        if count > maxIvDataPoints
            dataMod = Math.ceil count/maxIvDataPoints

            ivDisplayQuery.mod "dataPoint", dataMod, 1

        ivDisplayQuery.sort "dataPoint" #, 1 <-- new sort syntax for Mongoose 3.x
        callback ivDisplayQuery.stream()
DataManager::ivDataQueryStream=(testId、minTime、maxTime、callback)->
#如果提供了minTime和maxTime,请设置一个标志以限制查询的时间范围
除非是isNaN(minTime)
时间限制=真
#从配置加载要显示的最大IV数据点数
maxIvDataPoints=CONFIG.maxIvDataPoints
#构造计数查询以确定范围内的IV数据点的数量
ivCountQuery=TestDataPoint.count({})
ivCountQuery.where“testId”,testId
如果时间限制
ivCountQuery.gt“testTime”,minTime
ivCountQuery.lt“testTime”,maxTime
ivCountQuery.exec(错误,计数)->
ivDisplayQuery=TestDataPoint.find({})
ivDisplayQuery.where“testId”,testId
如果时间限制
ivDisplayQuery.gt“testTime”,minTime
ivDisplayQuery.lt“testTime”,maxTime
#如果数据集太大,则使用模进行采样,保留整个数据系列
#用于在maxIvDataPoints下方显示
如果计数>最大数据点
dataMod=Math.ceil count/maxIvDataPoints
ivDisplayQuery.mod“dataPoint”,dataMod,1

ivDisplayQuery.sort“dataPoint”#,1您被一对相关因素绊倒了:

  • Mongoose的默认查询batchSize
  • MongoDB有一个函数,其中需要内存中排序的查询对返回的文档数设置了查询批量大小的硬限制

  • 因此,您的选择是在
    TestDataPoint
    上放置一个组合索引,这将允许mongo在这种类型的查询中使用它按
    dataPoint
    排序,或者至少增加您期望的文档总数。

    您被一对相关因素绊倒了:

  • Mongoose的默认查询batchSize
  • MongoDB有一个函数,其中需要内存中排序的查询对返回的文档数设置了查询批量大小的硬限制

  • 因此,您的选择是在
    TestDataPoint
    上放置一个组合索引,这将允许mongo在这种类型的查询中使用它来按
    dataPoint
    进行排序,或者至少增加您期望的文档总数。

    哇,这太糟糕了。我将很快向mongoose发布一个修复程序,删除batchSize默认值(在流式处理大型结果集时非常有用)。谢谢你的指点


    更新:3.2.1和2.9.1已随修复程序一起发布(已删除batchSize默认值)。

    哇,太糟糕了。我将很快向mongoose发布一个修复程序,删除batchSize默认值(在流式处理大型结果集时非常有用)。谢谢你的指点


    更新:3.2.1和2.9.1已随修复程序一起发布(已删除batchSize默认值)。

    谢谢!这很有帮助。事实上,我的问题列表中包含了在TestDataPoint上实现索引的功能。我打算创建一个
    {testId:1,dataPoint:1}
    和另一个
    {testId:1,testTime:1,dataPoint:1}
    ,主要是为了加速上述函数中的查询。但是根据你说的,听起来他们会启用你提到的那种。对吗?将批处理大小设置为我的值
    maxIvDataPoints
    ,看起来也很简单。这样做有什么坏处吗?@BRValentine是的,他们应该这样做,但是使用[
    explain
    ](www.mongodb.org/display/DOCS/explain)确认查询正在使用您期望的索引。是的,设置批量大小很容易,唯一的缺点是内存需求的短暂增加。谢谢!这很有帮助。事实上,我的问题列表中包含了在TestDataPoint上实现索引的功能。我打算创建一个
    {testId:1,dataPoint:1}
    和另一个
    {testId:1,testTime:1,dataPoint:1}
    ,主要是为了加速上述函数中的查询。但是根据你说的,听起来他们会启用你提到的那种。对吗?将批处理大小设置为我的值
    maxIvDataPoints
    ,看起来也很简单。这样做有什么坏处吗?@BRValentine是的,他们应该这样做,但是使用[
    explain
    ](www.mongodb.org/display/DOCS/explain)确认查询正在使用您期望的索引。是的,设置批大小很容易,唯一的缺点是内存需求的短暂增加。