Было бы полезно узнать, как выглядят объекты, хранящиеся в базе данных, но я все равно постараюсь ответить на вопрос.
Есть 2 проблемы, которые я вижу.
- Вы не правильно запрашиваете
- Вам нужно работать с асинхронной природой JavaScript:)
1. Некорректная фильтрация монго
Вы, похоже, не предоставляете аргументы методу find
в правильном порядке и на самом деле не говорите Монго, что нужно что-то фильтровать.
Первый аргумент метода mongodb find - это объект фильтра. Это должно правильно фильтровать:
db.collection('one').find({field:1, name: 0}).toArray((err,
data.forEach(val => collectionOneArr.push(val))
});
2. Асинхронная выдача
Мы можем использовать, например, флаг readyForCompute
, чтобы убедиться, что мы запускаем метод compute
только после завершения обоих запросов к базе данных.
Это очень примитивное решение, которое не очень хорошо масштабируется, но достаточно для выполнения только 2 запросов.
let readyForCompute = false;
let arr1 = [];
let arr2 = [];
let db = client.db('job');
db.collection('one').find({name: "value_to_filter_name_field_by"}).toArray((err, data) => {
arr1 = data;
if (readyForCompute) compute();
readyForCompute = true;
});
db.collection('two').find({}).toArray((err,data) => {
arr2 = data;
if (readyForCompute) compute();
readyForCompute = true;
});
function compute() {
client.close();
console.log(arr1);
console.log(arr2);
// do your computation...
}