You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							60 lines
						
					
					
						
							1.5 KiB
						
					
					
				
			
		
		
	
	
							60 lines
						
					
					
						
							1.5 KiB
						
					
					
				'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;
 |