如何在NodeJ中将Mongo Bulk与多文档交易一起使用?

问题描述 投票:1回答:1

我想在mongo中运行批量操作,但同时在多文档事务中运行它。我正在使用运行MongoDb的NodeJs驱动程序的Meteor。

根据MongoDB文档(https://docs.mongodb.com/manual/reference/method/Bulk/),应该可以组合Bulkmulti-document transactions。但是,我无法解决此问题。

我的问题是如何将session对象传递给Bulk操作。对于非批量操作,我们只将其作为选项对象const options = {session: session}传递。我试图以几种方式通过它,但似乎没有任何效果。

session对象应如何在Bulk操作中使用?

下面是我要达到的目标的简单示例。

const getMongoClient = function() {
  const { client } = MongoInternals.defaultRemoteCollectionDriver().mongo;
  return client;
}


const session = client.startSession();
try {
  session.startTransaction();
  const bulk = someCollectionToBulkWrite.rawCollection().initializeOrderedBulkOp(); // Pass the session here?

  const dataInsert = someCollection.insert(someObject, {session}).await().value;
  const dataInsertOtherDocument = someOtherCollection.insert(someOtherObject, {session}).await().value;

  bulk.find( { _id: someId } ).update( { $set: { testField: 3}}); //Or pass the session here?
  bulk.find( { _id: someOtherId } ).update( { $set: { testField: 3}});

  bulk.execute().await(); // Or pass the session here?

  session.commitTransaction().await();
} finally {
  session.endSession();
}

node.js mongodb meteor bulkinsert
1个回答
0
投票

我检查了用于NodeJS的MongoDB驱动程序的代码,更具体地说,检查了Bulk API(https://github.com/mongodb/node-mongodb-native/blob/master/lib/bulk/common.js)的代码

execute方法的定义如下:

execute(_writeConcern, options, callback);

因此,会话应作为execute的第二个参数传递。在问题提供的示例中,看起来像这样:

bulk.execute(null, {session}).await();

© www.soinside.com 2019 - 2024. All rights reserved.