我有一个产品列表,每个产品都有一个存储在文件中的成分列表:
{ "name": "test", "inci": ['a', 'b', 'n'] },
{ "name": "test", "inci": ['a', 'b', 'n'] }
我需要检查我的 MongoDB 集合中是否存在给定成分:
var db = require('monk')('localhost/mydb');
var fs = require("fs");
var async = require("async");
var str = fs.readFileSync("products-parsed.json", "utf8");
var products = JSON.parse('[' + str + ']');
// collections
var ingredients = db.get('ingredients');
function escapeRegExp(str) {
return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
}
async.forEach(products, function(p, nextProduct) {
async.forEach(p.inci, function(i, nextIngredient) {
// Escape characters to prepare the regex
i = escapeRegExp(i.replace('*', '')).trim();
// Query the ingredient name passing a regexp as value to look for case insensitive matches
ingredients.findOne({name: new RegExp(i, 'i')}, function(err, result) {
if (err) { console.log(err); }
if (!result) {
console.log('ERROR:', i);
} else {
console.log('OK:', i);
}
// Proceed to next ingredient
nextIngredient();
});
}, function(err) {
// Proceed to next product
nextProduct();
});
}, function(err) {
// end
process.exit();
});
笔记:
如果我使用一个小的输入数组(少于 2.000 行左右),那么一切正常。如果我不使用整个数组(15.000 行),则每个产品都会被记录,console.log(i)
但不会执行查询。
我究竟做错了什么?