12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- 'use strict';
- const Aspect = require('./operation').Aspect;
- const defineAspects = require('./operation').defineAspects;
- const OperationBase = require('./operation').OperationBase;
- const executeCommand = require('./db_ops').executeCommand;
- const MongoError = require('../core').MongoError;
- const ReadPreference = require('../core').ReadPreference;
- class CreateIndexesOperation extends OperationBase {
- constructor(collection, indexSpecs, options) {
- super(options);
- this.collection = collection;
- this.indexSpecs = indexSpecs;
- }
- execute(callback) {
- const coll = this.collection;
- const indexSpecs = this.indexSpecs;
- let options = this.options;
- const capabilities = coll.s.topology.capabilities();
- // Ensure we generate the correct name if the parameter is not set
- for (let i = 0; i < indexSpecs.length; i++) {
- if (indexSpecs[i].name == null) {
- const keys = [];
- // Did the user pass in a collation, check if our write server supports it
- if (indexSpecs[i].collation && capabilities && !capabilities.commandsTakeCollation) {
- return callback(new MongoError('server/primary/mongos does not support collation'));
- }
- for (let name in indexSpecs[i].key) {
- keys.push(`${name}_${indexSpecs[i].key[name]}`);
- }
- // Set the name
- indexSpecs[i].name = keys.join('_');
- }
- }
- options = Object.assign({}, options, { readPreference: ReadPreference.PRIMARY });
- // Execute the index
- executeCommand(
- coll.s.db,
- {
- createIndexes: coll.collectionName,
- indexes: indexSpecs
- },
- options,
- callback
- );
- }
- }
- defineAspects(CreateIndexesOperation, Aspect.WRITE_OPERATION);
- module.exports = CreateIndexesOperation;
|