MongoDB, nodejs: killed. Утечка памяти
Необходимо записать в базу около 50 000 записей. Не хочет доходить до конца - обрывается. Помогите, пожалуйста, оптимизировать скрипт. Что здесь может быть не так? Добавилось 20 000 записей и выдало "killed".
const mongoose = require("mongoose");
const moment = require("moment");
const axios = require("axios");
const alog = require("axios-logger");
const { Orders } = require("./db");
const { Types } = mongoose;
const instance = axios.create({
baseURL: "URL",
timeout: 45000,
});
instance.interceptors.request.use((config) => {
config.params = config.params || {};
config.params["userlogin"] = "LOGIN";
config.params["userpsw"] = "PASS";
return alog.requestLogger(config);
});
(async () => {
await mongoose.connect("mongodb://127.0.0.1/abcp", {
useNewUrlParser: true,
useUnifiedTopology: true,
useCreateIndex: true,
useFindAndModify: true,
});
var period = 2;
var start = moment().subtract(1, "y"),
next = start;
for (; !next.isAfter(moment()); ) {
next = start.clone().add(period, "weeks");
var r = await instance.get("cp/orders", {
params: {
dateCreatedStart: start.format("YYYY-MM-DD 00:00:00"),
dateCreatedEnd: next.format("YYYY-MM-DD 00:00:00"),
},
});
console.log(`Status: ${r.status}`);
var data = [];
var counter = 0;
r.data.map(async (i) => {
data.push({
updateOne: {
filter: {number: i.number},
update: i,
upsert: true
}
})
counter++;
if (counter % 1000 == 0) {
try {
await Orders.bulkWrite(data, {ordered: false, j: false, wtimeout: 30000});
console.log("added");
data = [];
} catch(e) {
console.log(e);
}
}
});
start = next;
}
})();
Ответы (1 шт):
Автор решения: Aziz Umarov
→ Ссылка
Используйте
arr.splice(0, arr.length)
Для удаления элементов массива
