mongodb ссылка на документ - PullRequest
0 голосов
/ 01 июня 2018

У меня проблема с этим фрагментом кода.(Использование узлов, экспресс, mongoose для сохранения документов в mongodb)

// We have an array that contains objects (365) of type 'Day' to be stored in mongodb. 
// In my code this array contains data :-)
let arrDays = []

// Empty array to hold reference to the _id of the created days
let arrDaysID = [];

// Store all days in the 'arrDays' array to mongodb using mongoose
Day.create(arrDays, function(err, days){
    if(err){
        console.log("Something went wrong " + err)
    } else {
        // Iterate over every 'day' object in mongodb and add a reference to           
        // the _id of the 'day' object inside the 'year' object
        days.forEach(function(day){
            year.days.push(day._id);
            year.save();
        });
    }
});

Проблема в том, что вместо добавления каждой ссылки _id в объекте 'year' ссылка _id добавляется несколько раз.Когда код завершил работу, в массиве year.days содержится около 140 000 ссылок, а определено только 365 дней ...

Любые подсказки и советы приветствуются.

Дейв

1 Ответ

0 голосов
/ 01 июня 2018

В соответствии с документацией из model.create API это Shortcut for saving one or more documents to the database. MyModel.create(docs) does new MyModel(doc).save() for every doc in docs.

Это означает, что вы выполняете цикл forEach для каждого дня, добавленного в create, делая методэто n * n сложная функция.

365 * 365 = 133225, которая приблизительно равна 140000 записей.

Я думаю, что это объясняет проблему.

РЕДАКТИРОВАТЬ - лучшеАльтернатива

Согласно mongoose insertMany API , Model.insertMany() быстрее, чем Model.create because it only sends one operation to the server, rather than one for each document

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...