如何仅通过一次调用将一组对象保存到猫鼬数据库?
Posted
技术标签:
【中文标题】如何仅通过一次调用将一组对象保存到猫鼬数据库?【英文标题】: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 对!我没有注意到日期。感谢您指出。 你也可以试试这个:***.com/questions/16726330/… 【参考方案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)
// 简单的承诺事项
【讨论】:
以上是关于如何仅通过一次调用将一组对象保存到猫鼬数据库?的主要内容,如果未能解决你的问题,请参考以下文章