【问题标题】:How to save an array of objects to mongoose DB with only one call?如何仅通过一次调用将一组对象保存到猫鼬数据库?
【发布时间】:2012-04-16 18:12:19
【问题描述】:

有没有什么方法可以通过 one 调用将 JSON 对象数组保存到 mongodb? 类似:

schemeObject.save(array_of_json_object, callback);

我正在使用mongoosejs

【问题讨论】:

  • 能否更新正确答案?
  • @IcyFlame 从技术上讲,您链接的帖子与这篇文章是重复的。
  • @DanMandle 对!我没有注意到日期。感谢您指出。
  • 你也可以试试这个:stackoverflow.com/questions/16726330/…

标签: javascript node.js mongodb mongoose


【解决方案1】:

有一种使用 MongooseJS 批量插入的方法。我不确定这是否是一项新功能,因为有人提出/回答了这个问题,但我想如果有人通过搜索来到这里,他们应该知道如何去做。

var array = [{ type: 'jelly bean' }, { type: 'snickers' }];
Candy.create(array, function (err, jellybean, snickers) {
  if (err) // ...
});

这里是文档:http://mongoosejs.com/docs/api.html#model_Model.create

【讨论】:

  • 如果我们想创建新文档,这应该可以工作。更新从查询返回的数组或文档怎么样?
  • 为此,我认为您必须对结果执行 find() 然后 forEach() ,更新值并为每个值执行 save() 。但我自己对 Mongoose 还是很陌生。
【解决方案2】:

我认为 mongooosejs 不可能。但是,您可以使用本机支持的 ​​mongodb 的 BATCH 插入。

有用的链接:

http://www.mongodb.org/display/DOCS/Inserting#Inserting-Bulkinserts

https://groups.google.com/forum/#!msg/mongoose-orm/IkPmvcd0kds/bZuYCN_orckJ

【讨论】:

  • 答案在第二个链接中找到。谢谢
【解决方案3】:

这也适用于猫鼬

Laptop.insertMany(laptopData, function (err, laptop) {
  if (err) {
    console.log(err);
  };
  console.log(laptop);
});

【讨论】:

    【解决方案4】:

    这样的事情怎么样?我知道它会遍历整个数组.. 不要问我关于 Big O 的问题.. 可能不是最好的插入方式,但仅适用于某种初始数据转储..

    var arr = // array of objects;
        res = [];
    
    arr.forEach(function (item) {
        item.save(function (err) {
            res.push(err);
            if (res.length === arr.length)
            {
                // Done
            }
        });
    });
    

    【讨论】:

    • 如果是一个一个的,那不会是批量插入!
    【解决方案5】:

    我使用的另一种解决方法。如果你使用的是带有 Promise 的猫鼬,你可以使用 Q 来做到这一点。

    您可以使用以下代码开始使用 Q 作为 mongoose 的默认承诺:

    const mongoose = require('mongoose');
    mongoose.Promise = require('q').Promise;
    

    然后您可以保存一组文档,如下所示。假设我们正在存储一个用户模型数组,我在users 变量中显示了这些模型。

    Q
      .all(users.map(curr => curr.save()))
      .then((results) => { //do something })
      .catch((err) => { //handle error })
    

    .save() 将返回一个 q 承诺并使用数组 map 函数,我们将使用用户模型数组创建一个承诺数组。

    【讨论】:

      【解决方案6】:

      我得到了解决方案而不是使用

      new model_name({
      your data
      })
      

      使用这个

      model_name.create({your data}).then(res).catch(err) 
      

      // 简单的承诺事项

      【讨论】:

        猜你喜欢
        • 2012-08-11
        • 2017-06-09
        • 2021-01-30
        • 2017-04-27
        • 2018-07-12
        • 2016-05-03
        • 1970-01-01
        • 2021-03-21
        相关资源
        最近更新 更多