我有一个潜在的大查找查询,一旦满足我的服务器“javascript”条件就必须停止,例如我的服务器已经有文件结果来找出解决方案。
这里的想法是从mongo迭代一个游标,点击“按需”mongo,有点“流”,所以我的服务器或mongo都不能一次获取所有结果。
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
答案 0 :(得分:1)
流星光标不是mongo光标。流星游标没有下一个或下一个。所以,这只是一个关于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垃圾&将$where
与findOne
+一起使用(执行find().limit(1).explain()
,以便您可以看到它不会触及每个文档。)
5.在您的数据库中存储一些内容,这样您就不必在光标上使用javascript。应该像瘟疫一样避免在服务器上的每个文档上重复javascript循环。存储很便宜。加工,而不是那么多。