我正在将我的应用程序从Mongoose
2.6.5迁移到3.1.2,并且遇到了一些意外行为。也就是说,我注意到查询结果自动被限制为1000条记录,而几乎所有其他功能都相同。在下面的代码中,我设置了一个值maxIvDataPoints
,该值限制了返回(最终发送到客户端浏览器)的数据点的数量,并且该值在其他位置设置为1500。我使用一个计数查询来确定潜在结果的总数,然后再使用一个mod来限制实际查询结果,该计数使用count和value
maxIvDataPoints
来确定mod的值。我正在运行节点0.8.4和mongo 2.0.4,并在coffeescript中编写服务器端代码。
在安装monhtml" target="_blank">goose
3.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()
您会被以下两个相关因素绊倒:
因此,您的选择是在该索引上放置一个组合索引TestDataPoint
,以使mongo可以dataPoint
在此类型的查询中使用该索引进行排序,或者将批处理大小增加到至少所需的文档总数。
问题内容: 我有一个简单的猫鼬模型,在其上我调用find,最大限制为100,它调用完成的回调: 如果我将此行修改为(或更高的数字),则永远不会调用该回调 任何地方都没有错误,数据库保持正常运行,但是此节点应用程序冻结,必须重新启动。 如果我进入服务器以连接到相同的数据库并连接到mongo shell,则在同一集合上,find({})会在不到一秒的时间内返回所有〜700个集合。当我将同一数据库克隆到
问题内容: 我非常确定我们不能将LIMIT子句用于我想做的事情-因此想确定是否还有其他方法可以实现此目的。 我有一个表,其中捕获了哪个用户访问了哪个商店。每次用户访问商店时,都会在此表中插入一行。 一些领域是 shopping_id(primary key) store_id user_id 现在,我想要的是-对于给定的一组商店,找到访问该商店的最大次数的前5位用户。 我可以一次在1个商店中进行以
问题内容: 我有一个查询列出所有帖子: 查询列出所有行,我只希望每行显示最后2条帖子,我该怎么做? 问题答案: 这可能有用,尽管我不能说太多性能。
问题内容: 我需要在node.js中用猫鼬返回查询的结果。 如何返回值以将值设置为变量? 我需要做的是: 为了有: 非常感谢您的回复 。 我还有另一个问题。 如何使用find或findOne在查询运算符中传递变量?喜欢 : 问题答案: 有几种方法可以实现您想要的。 1.使用猫鼬查询 在这种策略中,您的函数返回一个Mongoose查询,您以后可以使用它来调用该方法并使用它来获取结果。 然后,您可以简
我有以下在mongoDB CLI中工作的查询: 下面的问题,我认为是猫鼬的等价物: 使用mongoose调试,我可以看到mongoose转换为的以下查询正在删除数组中所有文档的整个pull操作的后半部分。为什么会这样?
问题内容: 我想在Monoose中将两个OR查询与AND结合在一起,例如以下SQL语句: 我在NodeJS模块中尝试了此操作,该模块仅从主应用程序获取模型对象: 但这是行不通的,所有OR条件都将像下面的SQL语句一样连接在一起: 如何在猫鼬中结合AND 和AND 的两个条件? 问题答案: 直接按以下方式创建查询对象可能是最简单的: 但是,您也可以使用最新的3.x Mongoose版本中提供的帮助程