'use strict'; const MongoError = require('../error').MongoError; const collectionNamespace = require('./shared').collectionNamespace; const command = require('./command'); function writeCommand(server, type, opsField, ns, ops, options, callback) { if (ops.length === 0) throw new MongoError(`${type} must contain at least one document`); if (typeof options === 'function') { callback = options; options = {}; } options = options || {}; const ordered = typeof options.ordered === 'boolean' ? options.ordered : true; const writeConcern = options.writeConcern; const writeCommand = {}; writeCommand[type] = collectionNamespace(ns); writeCommand[opsField] = ops; writeCommand.ordered = ordered; if (writeConcern && Object.keys(writeConcern).length > 0) { writeCommand.writeConcern = writeConcern; } if (options.collation) { for (let i = 0; i < writeCommand[opsField].length; i++) { if (!writeCommand[opsField][i].collation) { writeCommand[opsField][i].collation = options.collation; } } } if (options.bypassDocumentValidation === true) { writeCommand.bypassDocumentValidation = options.bypassDocumentValidation; } const commandOptions = Object.assign( { checkKeys: type === 'insert', numberToReturn: 1 }, options ); command(server, ns, writeCommand, commandOptions, callback); } module.exports = writeCommand;