Вие не можете използвайте асинхронен резултат като върната стойност от функция. Толкова е просто. Трябва да доставите асинхронния резултат на повикващия чрез обратно извикване, което е предоставено като параметър на функцията (или да използвате фючърси/обещания и ефективно да отложите тази стъпка, но това е по-сложно).
if_exists
вместо това трябва да изглежда така:
var if_exists = function(query, where, callback) {
require('mongodb').connect(DB.mongo_url, function(err, db) {
db.collection(where, function(err, coll) {
coll.findOne(query, function(e, r) {
//console.log(r);
if (r === null) {
callback(e, false);
} else {
callback(e, true);
}
// You should either close db here or connect during start up
// and leave it open.
db.close();
});
});
});
}