【问题标题】:Mongoose create multiple documentsMongoose 创建多个文档
【发布时间】:2013-03-02 06:09:16
【问题描述】:

我知道在最新版本的 Mongoose 中,您可以将多个文档传递给 create 方法,在我的例子中甚至可以传递一个文档数组。

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

我的问题是数组的大小是动态的,所以在回调中拥有一个已创建对象的数组会很有帮助。

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

    candies.forEach(function(candy) {
       // do some stuff with candies
    });
});

文档中没有,但是这样的事情可能吗?

【问题讨论】:

    标签: node.js mongoose


    【解决方案1】:

    从 Mongoose v5 开始,您可以使用 insertMany 根据the mongoose site.create() 快:

    验证文档数组并将它们插入的快捷方式 MongoDB 如果它们都是有效的。这个功能比.create()快 因为它只向服务器发送一个操作,而不是一个 每个文档。

    完整示例:

    const mongoose = require('mongoose'); 
      
    // Database connection 
    mongoose.connect('mongodb://localhost:27017/databasename', { 
        useNewUrlParser: true, 
        useCreateIndex: true, 
        useUnifiedTopology: true
    }); 
      
    // User model 
    const User = mongoose.model('User', { 
        name: { type: String }, 
        age: { type: Number } 
    }); 
    
    
    // Function call, here is your snippet
    User.insertMany([ 
        { name: 'Gourav', age: 20}, 
        { name: 'Kartik', age: 20}, 
        { name: 'Niharika', age: 20} 
    ]).then(function(){ 
        console.log("Data inserted")  // Success 
    }).catch(function(error){ 
        console.log(error)      // Failure 
    });
    

    【讨论】:

      【解决方案2】:

      by insert 集合 db 函数, 示例:

      Model.collection.insert(array, (err, list) => {
        if (err) throw err;
      
        console.log('list:', list);
      });
      

      【讨论】:

        【解决方案3】:

        使用Mongoose v5.1.5,我们可以使用 insertMany() 方法并传递数组。

        const array = [
            {firstName: "Jelly", lastName: "Bean"},
            {firstName: "John", lastName: "Doe"}
        ];
        
        Model.insertMany(array)
            .then(function (docs) {
                response.json(docs);
            })
            .catch(function (err) {
                response.status(500).send(err);
            });
        

        【讨论】:

          【解决方案4】:

          根据 GitHub 上的 this ticket,如果您在使用 create() 时提供了一个数组,Mongoose 3.9 和 4.0 将返回一个数组和一个参数的展开。

          【讨论】:

            【解决方案5】:

            您可以通过arguments 访问回调参数的变量列表。所以你可以这样做:

            Candy.create(array, function (err) {
                if (err) // ...
            
                for (var i=1; i<arguments.length; ++i) {
                    var candy = arguments[i];
                    // do some stuff with candy
                }
            });
            

            【讨论】:

            • 哈哈,全忘了。非常感谢。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2019-05-08
            • 2016-04-30
            • 2019-06-09
            • 2017-06-22
            • 2015-10-13
            • 2020-04-20
            • 2019-02-28
            相关资源
            最近更新 更多