gpt4 book ai didi

node.js - mongoose批量操作

转载 作者:可可西里 更新时间:2023-11-01 09:08:51 27 4
gpt4 key购买 nike

我想通过 MongoOSE 在单个操作中存储批量数据(超过 1000 或 10000 条记录)。但是 MongoOSE 不支持批量操作,所以我将使用 native 驱动程序(MongoDB,用于插入)。我知道我会绕过所有 MongoOSE 中间件,但没关系。 (如果我错了,请纠正我!:))

我可以选择通过 insert 方法存储数据。但是MongoDB也提供了Bulk类(有序和无序操作)。现在我有以下问题:

  • insertbulk 操作之间的区别(两者都可以存储批量数据)?
  • initializeUnorderedBulkOp()(串行执行操作)和initializeOrderedBulkOp()(并行执行操作)之间有什么具体区别?
  • 如果我将使用 initializeUnorderedBulkOp 那么它会影响范围搜索或任何副作用吗?
  • 我可以通过 Promisification(通过 BlueBird)来实现吗?? (我正在尝试这样做。)

谢谢

编辑:我说的是关于多次插入的 bulkinsert。哪一个更好?通过批量生成器逐个插入或在插入方法中分批插入 (1000)。我希望现在它会清除 Mongoose (mongodb) batch insert?这个链接

最佳答案

如果您从 Mongoose 模型中调用它,您需要 .collection 访问器

var bulk = Model.collection.initializeOrderedBulkOp();

// examples
bulk.insert({ "a": 1 });
bulk.find({ "a": 1 }).updateOne({ "$set": { "a": 2 } });

bulk.execute(function(err,result) {
// result contains stats of the operations
});

尽管如此,您在执行此操作时需要“小心”。除了不绑定(bind)到可以附加到 mongoose 模式的相同检查和验证之外,当您调用 .collection 时,您需要“确定”已经建立了与数据库的连接。 Mongoose 方法会为您处理这些,但是一旦您使用了底层的驱动程序方法,您就全靠自己了。

至于差异,一切都在命名中:

  • Ordered:表示批处理指令按照添加的顺序执行。他们一个接一个地依次执行,一次执行一个。如果在任何时候发生错误,批处理的执行将停止并返回错误响应。到那时为止的所有操作都是“committed”。这不是回滚。

  • UnOrdered:意味着批处理操作可以按“任何”顺序执行并且通常是并行执行。这可以导致更快的更新,但当然不能用于批处理中的一个批量操作要在另一个批量操作之前发生的情况(上面的示例)。发生的任何错误只会在结果中“报告”,整个批处理将在发送到服务器时完成。

当然,这两种执行方式与标准方法的核心区别在于,“整批”(实际上最多 1000 个)被发送到服务器,而您只得到一个响应。这节省了网络流量并等待每个单独的 .insert() 或其他类似操作完成。

至于是否可以使用“promise”,以及任何其他可以转换为返回 promise 的回调都遵循与此处相同的规则。请记住,尽管“回调/ promise ”在 .execute() 方法上,并且您返回的内容符合从批量操作结果返回的规则。

有关详细信息,请参阅 "Bulk"在核心文档中。

关于node.js - mongoose批量操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31309834/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com