Mongoose 创建多个文档

Posted

技术标签:

【中文标题】Mongoose 创建多个文档【英文标题】:Mongoose create multiple documents 【发布时间】: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
    );
);

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

【问题讨论】:

【参考方案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
    
);

【讨论】:

哈哈,全忘了。非常感谢。

以上是关于Mongoose 创建多个文档的主要内容,如果未能解决你的问题,请参考以下文章

发送多个子文档时,Mongoose 验证失败

发送多个子文档时,Mongoose 验证失败

链接多个 Promise,使用 map 循环数组并创建 mongoose 文档?

如何在一个请求中在 Mongoose 中创建多个文档

Mongoose 更新多个文档

Mongoose 中的多个文档更新插入