gpt4 book ai didi

javascript - Meteor js 光标 hasNext() 和 next()?

转载 作者:行者123 更新时间:2023-11-28 00:11:32 24 4
gpt4 key购买 nike

问题

我有一个潜在的大查找查询,一旦满足我的服务器“javascript”条件,该查询就必须停止,例如我的服务器已经有文档结果来找出解决方案。

这里的想法是从 mongo 迭代一个游标,“按需”点击 mongo,有点“流”,所以我的服务器或 mongo 都不需要立即获取所有结果。

预期行为

  • 查询并获取游标 ( r = Collection.find() )
  • 检查下一个 ( r.hasNext() )
  • 获取下一个 ( r.next() )
  • 一旦满足我的要求,就停止(删除 r )

示例代码

Collection.find().forEach(function(doc) {
doc = do_my_business( doc );
if (doc.found) {
// hey mister cursor, go home and die! don't touch my mongo anymore!
return false;
}
});

真正的问题

我创建了另一个问题,这实际上就是我最终到达这里的原因: https://stackoverflow.com/questions/30836586/mongodb-find-near-until-maxdistance-or-at-least-x-records

最佳答案

meteor 光标不是 mongo 光标。 Meteor 游标没有 hasNext 或 next。所以,这实际上只是一个关于 forEach 的问题,它与 ES5 forEach 相同。因此,您可以执行以下操作:

1.将所有文档提取到一个数组中并对其运行 for 循环,满足条件时中断。

2.满足条件时转动标志并在函数开头进行检查:

if (isHappy) return;
doc = do_my_business( doc );
if (doc.found) isHappy = true;

3.使用 try catch 循环:

foo = {};
try {
Collection.find().forEach(function(doc) {
doc = do_my_business( doc );
if (doc.found) {
throw foo;
}
});
} catch(e) {
if (e !== foo) {
throw e;
}
}

4.忘记 forEach 垃圾并使用 $wherefindOne + (执行 find().limit(1).explain() 所以你可以看到它不会触及每个文档。)

5.在数据库中存储一些内容,这样您就不必在光标上使用 JavaScript。像瘟疫一样应该避免对服务器上的每个文档重复 javascript 循环。存储很便宜。处理,没那么多。

关于javascript - Meteor js 光标 hasNext() 和 next()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30836553/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com