1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- '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 = docs.map(document => ({ insertOne: { document } }));
- 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;
|