Решение, которое я нашел, работало для меня, заключалось в том, чтобы использовать цикл for для циклического прохождения массива данных, а затем внутри цикла for вызывать метод, который проверяет, находятся ли данные на сервере или нет.
Код:
for (var i = 0; i < elseArray.length; i++) {
var tempArray = elseArray[i][0].split(' ');
var month = getMonthFromString(tempArray[0]);
var date = tempArray[1];
var name = Name[i];
var loc = "";
if (elseArray[i][1].indexOf(':') != -1) {
min = elseArray[i][1].substring(elseArray[i][1].indexOf(':') + 1, elseArray[i][1].indexOf(':') + 3);
}
if (elseArray[i][1].includes("p.m.")) {
hour = parseInt(elseArray[i][1].substring(0, elseArray[i][1].indexOf('–')), 10) + 12;
} else {
hour = parseInt(elseArray[i][1].substring(0, elseArray[i][1].indexOf('–')), 10);
}
if (elseArray[i][2].replace(/\s/g, '') == "Event") {
loc = "Blue House"
} else {
loc = "Red House"
}
getQuery(name, loc, year, month, date, hour, min);
if (elseArray[i].length == 4) {
if (elseArray[i][3].replace(/\s/g, '') == "Event") {
loc = "Blue House"
} else {
loc = "Red House"
}
getQuery(name, loc, year, month, date, hour, min);
}
}
В цикле for просматривается массив данных с сервера, который я считываю в данных, сохраняю все в переменных, а затем вызываю getQuery()
, который проверяет текущую базу данныхdata и создает новый объект JSON, если текущие данные не были найдены в базе данных.
getQuery()
метод:
function getQuery()(name, loc, year, month, day, hour, min) {
Collection.findOne({
Name: name,
Loc: loc,
"DateTime.Year": year,
"DateTime.Month": month,
"DateTime.Day": day
}, function(err, CollItem) {
if (err) {
res.send("MongoDB Error: " + err);
return false;
}
if (!CollItem) {
var E = new Collection({
Name: name,
Loc: loc,
Capacity: 0,
Attendance: 0,
DateTime: {
Year: year,
Month: month,
Day: day,
Hour: hour,
Min: min,
Sec: 0
}
});
E.save();
}
});
}
В методе getQuery()
, если объект найденчто соответствует name, loc, year, etc...
, который передается ни в чем, не происходит, иначе данные сохраняются и хранятся в базе данных.
Короче говоря, я превратил Collection.findOne({...});
в его собственный метод, называемый getQuery()
, чтобы обойтиразница в скорости между асинхронными задачами и Collection.findOne({...});
.