我收集了大约1M个文档。每个文档都有internalNumber
属性,我需要internalNumber
在node.js代码中获取所有。
以前我在用
db.docs.distinct("internalNumber")
要么
collection.distinct('internalNumber', {}, {},(err, result) => { /* ... */ })
在Node中。
但是随着集合的增长,我开始出现错误:distinct is too big, 16m cap
。
现在,我想使用聚合。它消耗大量内存,速度很慢,但是可以,因为我在脚本启动时只需要执行一次。我在Robo 3T GUI工具中尝试了以下操作:
db.docs.aggregate([{$group: {_id: '$internalNumber'} }]);
它有效,我想按以下方式在node.js代码中使用它:
collection.aggregate([{$group: {_id: '$internalNumber'} }],
(err, docs) => { /* ... * });
但是在Node中,我收到一个错误:"MongoError: aggregation result exceeds maximum document size (16MB) at Function.MongoError.create"
。
请帮助克服该限制。
问题在于,本机驱动程序与默认情况下shell方法的工作方式不同,因为“ shell”实际上返回的“ cursor”对象,其中本机驱动程序“显式”需要此选项。
没有“光标”的情况下,.aggregate()
将单个BSON文档作为文档数组返回,因此我们将其变为游标以避免这种限制:
let cursor = collection.aggregate(
[{ "$group": { "_id": "$internalNumber" } }],
{ "cursor": { "batchSize": 500 } }
);
cursor.toArray((err,docs) => {
// work with resuls
});
然后,您可以使用常规方法,例如.toArray()
使结果成为“客户端”上没有相同限制的JavaScript数组,或使用其他方法来迭代“游标”。
问题内容: 我在Stack Exchange上的一个问题中看到,限制可能是每15分钟的请求数的函数,并且还取决于算法的复杂性,只不过这并不复杂。 所以我使用这段代码: 我总是收到Twitter限制错误: 问题答案: 问题在于您的区块放置在错误的位置。将数据插入数据库将永远不会产生-对其进行迭代。我建议重构您的代码以在无限循环中调用方法。该调用应放置在块中,因为它可能引发错误。 代码大致如下所示:
问题内容: 如何为特定类型执行ElasticSearch聚合?我意识到您可以在请求网址中指定索引和/或类型,但是我想对两种不同的类型进行汇总。 谢谢! 问题答案: 您可以按类型过滤聚合,然后使用子聚合。例如:
问题内容: 此sql代码抛出一个 WHERE中不允许使用聚合函数 如何避免此错误? 问题答案: 用替换子句,如下所示: 与相似,两者均用于过滤结果记录,但用于过滤汇总数据(使用时)。
我有两段递归代码,打算递归地打印出数组的一半,直到得到数组长度为1的数组。没有变量赋值的代码无限运行,而具有变量赋值的代码的行为与预期一样。 有什么线索说明为什么会这样吗? 无限运行,小心 不会无限运行 我以为这里可能存在某种可变性,但我无法想象会有什么连锁反应。我以为每次调用函数时,我们都会将一个全新的数组传递给它。。。
问题内容: 我有一个GUI,可根据滑块值向Web服务器发布命令。其中一些滑块是“耦合”在Web服务器上的,因此更改其中一个也可能会更改另一个。通过Web服务器返回基于发出的命令设置的值的列表来完成耦合。 因此,我可以根据此响应轻松设置适当的滑块,但问题是这样做会导致ChangeListener被触发,然后再次向Web服务器发出命令。理想情况下,“耦合”应表现良好,并避免无限循环,但这是一个潜在问题
问题内容: 我有3个基于Acivity的应用程序,它的工作流程是 和。当onResume事件触发时,需要调用MainActivity。无需参加其他两项活动。 onResume事件触发时有什么方法可以调用? 谢谢 问题答案: 您可以在AndroidManifest.xml文件中为MainActivity 设置属性。请参阅此处以查找原因和更多详细信息。我认为这是满足您需求的最便捷方法。 编辑: 我刚刚