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 创建多个文档的主要内容,如果未能解决你的问题,请参考以下文章