2015-02-24 2 views
1

Предположим, у меня есть JavaScript-массив companyBills, и внутри него у меня есть m объекты, хранящиеся таким образом; с элементами m > 100.000.Храните огромный массив данных JSON в MongoDB через Mongoose

{key_0:value_0, key_1:value_0_1, key_n:value_0_n}, 
{key_0:value_1, key_1:value_1_1, key_n:value_1_n}, 
{key_0:value_m, key_1:value_m_1, key_n:value_m_n} 

Теперь я хочу, чтобы хранить это в MongoDB через Мангуста, таким образом:

CompanyBills.create (companyBills, function(err, jellybean, snickers) { 
     if(!err) {   
      console.log('Success'); 
     } else { 
      console.log('Error'); 
     } 

Однако массив companyBills слишком велик. Таким образом, я хочу хранить в кусках 1/100 м. Как разбить массив companyBills Время-эффективно и хранить в MongoDB?

Я создаю массив с https://github.com/SheetJS/js-xlsx, возможно, есть возможность заглянуть рано.

+1

Вы можете разместить код создания массива? Если вы не возражаете против порядка вставленных данных, вы можете разделить массив на куски и использовать библиотеку 'async' для параллельного размещения каждого фрагмента в db. –

+1

Существует действительно решение для этого конкретного сценария: https://github.com/SheetJS/js-xlsx/issues/138 Однако я бы очень интересовался асинхронной библиотекой для параллельного доступа. – nottinhill

ответ

2

Вы пробовали метод массовой вставки?

CompanyBills.collection.insert([huge array], function (err, results) { 
    Console.log(results) 
}) 

http://docs.mongodb.org/manual/tutorial/insert-documents/

+0

Похоже, что это куприт, на данный момент в Mongoose нет метода массовой записи; см. https://github.com/LearnBoost/mongoose/issues/2366, поэтому метод 'create', который я использовал, очень медленный, вставляя каждый элемент самостоятельно. Таким образом, я должен использовать базовый драйвер MongoDB. – nottinhill

+0

Его очень легко получить доступ к драйверу напрямую с помощью CompanyBill.collection.insert(). Отредактировано выше – sctskw

+0

Подтверждено это * будет * быть решением, если бы не для новой ошибки, при которой встроенная опция навальной вставки драйвера бесполезна - http://stackoverflow.com/questions/24466366/mongoose-rangeerror-maximum-call-stack-size -exceeded Возможно, вы можете подтвердить? – nottinhill

Смежные вопросы