list_indexes.js
1.26 KB
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
'use strict';
const CommandOperationV2 = require('./command_v2');
const Aspect = require('./operation').Aspect;
const defineAspects = require('./operation').defineAspects;
const maxWireVersion = require('../core/utils').maxWireVersion;
const LIST_INDEXES_WIRE_VERSION = 3;
class ListIndexesOperation extends CommandOperationV2 {
constructor(collection, options) {
super(collection, options, { fullResponse: true });
this.collectionNamespace = collection.s.namespace;
}
execute(server, callback) {
const serverWireVersion = maxWireVersion(server);
if (serverWireVersion < LIST_INDEXES_WIRE_VERSION) {
const systemIndexesNS = this.collectionNamespace.withCollection('system.indexes').toString();
const collectionNS = this.collectionNamespace.toString();
server.query(systemIndexesNS, { query: { ns: collectionNS } }, {}, this.options, callback);
return;
}
const cursor = this.options.batchSize ? { batchSize: this.options.batchSize } : {};
super.executeCommand(
server,
{ listIndexes: this.collectionNamespace.collection, cursor },
callback
);
}
}
defineAspects(ListIndexesOperation, [
Aspect.READ_OPERATION,
Aspect.RETRYABLE,
Aspect.EXECUTE_WITH_SELECTION
]);
module.exports = ListIndexesOperation;