【问题标题】:Store huge Array of JSON data in MongoDB via Mongoose通过 Mongoose 在 MongoDB 中存储大量 JSON 数据
【发布时间】:2015-02-25 01:44:04
【问题描述】:

假设我有一个 JavaScript 数组 companyBills,在其中我有 m 个以这种方式存储的对象;带有m > 100.000 元素。

{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}

现在我想通过 Mongoose 将其存储在 MongoDB 中,方式如下:

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

但是数组companyBills 太大了。因此,我想存储在 1/100 m 的块中。如何高效地拆分数组companyBills并存储在MongoDB中?

我正在使用https://github.com/SheetJS/js-xlsx 创建数组,也许有机会早点加入。

【问题讨论】:

  • 能贴出创建数组的代码吗?如果您不介意插入数据的顺序,您可以将数组分成块并使用async 库将每个块并行放入数据库中
  • 对于这种特殊情况确实有一个解决方案:github.com/SheetJS/js-xlsx/issues/138 但是我会对用于并行访问的异步库非常感兴趣。

标签: node.js algorithm mongoose


【解决方案1】:

你试过批量插入的方法吗?

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

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

【讨论】:

  • 貌似是cuprit,目前Mongoose中没有批量写入方法;见github.com/LearnBoost/mongoose/issues/2366,所以我使用的create方法很慢,每个元素都自己插入。因此我必须使用底层的 MongoDB 驱动程序。
  • 使用 CompanyBill.collection.insert() 可以很容易地直接访问驱动程序。以上编辑
  • 确认这是一个解决方案,如果不是因为一个新的错误导致本机驱动程序批量插入选项无用 - stackoverflow.com/questions/24466366/…也许你可以确认?
猜你喜欢
  • 1970-01-01
  • 2011-10-26
  • 1970-01-01
  • 2017-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-01
相关资源
最近更新 更多