333
schangxiang@126.com
2025-09-19 18966e02fb573c7e2bb0c6426ed792b38b910940
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
'use strict';
 
const OperationBase = require('./operation').OperationBase;
const BulkWriteOperation = require('./bulk_write');
const MongoError = require('../core').MongoError;
const prepareDocs = require('./common_functions').prepareDocs;
 
class InsertManyOperation extends OperationBase {
  constructor(collection, docs, options) {
    super(options);
 
    this.collection = collection;
    this.docs = docs;
  }
 
  execute(callback) {
    const coll = this.collection;
    let docs = this.docs;
    const options = this.options;
 
    if (!Array.isArray(docs)) {
      return callback(
        MongoError.create({ message: 'docs parameter must be an array of documents', driver: true })
      );
    }
 
    // If keep going set unordered
    options['serializeFunctions'] = options['serializeFunctions'] || coll.s.serializeFunctions;
 
    docs = prepareDocs(coll, docs, options);
 
    // Generate the bulk write operations
    const operations = [
      {
        insertMany: docs
      }
    ];
 
    const bulkWriteOperation = new BulkWriteOperation(coll, operations, options);
 
    bulkWriteOperation.execute((err, result) => {
      if (err) return callback(err, null);
      callback(null, mapInsertManyResults(docs, result));
    });
  }
}
 
function mapInsertManyResults(docs, r) {
  const finalResult = {
    result: { ok: 1, n: r.insertedCount },
    ops: docs,
    insertedCount: r.insertedCount,
    insertedIds: r.insertedIds
  };
 
  if (r.getLastOp()) {
    finalResult.result.opTime = r.getLastOp();
  }
 
  return finalResult;
}
 
module.exports = InsertManyOperation;