Mongoose (mongodb) 批量插入、删除、更新和无操作
Posted
技术标签:
【中文标题】Mongoose (mongodb) 批量插入、删除、更新和无操作【英文标题】:Mongoose (mongodb) batch insert, delete, update and no operation 【发布时间】:2016-03-15 14:12:26 【问题描述】:大家好,我正在使用 mongodb 版本“mongodb-win32-x86_64-2008plus-ssl-3.0.7-signed
”和中间人 mongoose 版本“4.2.5
”尝试批量插入、删除和更新。我已经搜索了几天,但没有发现任何答案是明确的。
我有一个数组列表,它在下面,数组列表有四个具有不同标签级别的对象。
var mangoobjectList = [
id: 1, name: 'Gopal Vog', origin: 'Rajshahi', tag: 0 ,//no change
id: 2, name: 'Himsagor', origin: 'Dhaka', tag: 1 ,//insert
id: 3, name: 'Langra', origin: 'Sylet', tag: 2 ,//update
id: 4, name: 'Amrupali', origin: 'Chuadanga', tag: 3 //delete
];
我的意思是说tag = 0 --no operation, tag = 1 -- inset tag = 2 – 更新,标签 = 3 – 删除
现在我想保存这个数组一次性进入 mongodb 数据库。如果任何对象失败,则整个数组将回滚。任何想法或解决方案将不胜感激。
【问题讨论】:
你看过这个链接docs.mongodb.org/manual/faq/fundamentals/…来自***.com/questions/21487233/… @DaveCoast,好的,但是有其他方法吗? @DaveCoast,我想改变我的数据库,你能告诉我哪个 nosql 数据库最适合我吗? 大多数 nosql 数据库不支持事务。如果它对您很重要,您应该使用 SQL。 我在下面添加了一些示例代码。您可以使用该插件在您的情况下执行事务。如果您不太关心性能,也许它对您有用。 【参考方案1】:你想要的是一个“事务”,但 mongodb 不支持它。 mongodb 中的文档是自动更新的 - 您不能从批量插入/更新/删除中回滚。最好你应该重新考虑你的数据库设计。
您还可以实现 mongodb 文档中描述的“类事务”方法: https://docs.mongodb.org/manual/tutorial/perform-two-phase-commits/
此外,您可以为此使用 mongoose 插件 - 这可能是最简单的选择: https://www.npmjs.com/package/mongoose-transaction
var mongoose = require('mongoose');
var Transaction = require('mongoose-transaction')(mongoose);
var mangoobjectList = [
id: 1, name: 'Gopal Vog', origin: 'Rajshahi', tag: 0 ,//no change
id: 2, name: 'Himsagor', origin: 'Dhaka', tag: 1 ,//insert
id: 3, name: 'Langra', origin: 'Sylet', tag: 2 ,//update
id: 4, name: 'Amrupali', origin: 'Chuadanga', tag: 3 //delete
];
var transaction = new Transaction();
mangoobjectList.forEach(function(doc)
switch(doc.tag)
case 1:
transaction.insert('collectionName', doc);
break;
case 2:
transaction.update('collectionName', doc._id, doc);
break;
case 3:
transaction.remove('collectionName', doc._id);
break;
default:
//do nothing
);
transaction.run(function(err, docs)
// your code here
);
【讨论】:
以上是关于Mongoose (mongodb) 批量插入、删除、更新和无操作的主要内容,如果未能解决你的问题,请参考以下文章
使用 mongoose 在 MongoDB 中批量插入多个集合