createIndex method

Future<Map<String, dynamic>> createIndex(
  1. String collectionName, {
  2. String? key,
  3. Map<String, dynamic>? keys,
  4. bool? unique,
  5. bool? sparse,
  6. bool? background,
  7. bool? dropDups,
  8. Map<String, dynamic>? partialFilterExpression,
  9. String? name,
})

Implementation

Future<Map<String, dynamic>> createIndex(String collectionName,
    {String? key,
    Map<String, dynamic>? keys,
    bool? unique,
    bool? sparse,
    bool? background,
    bool? dropDups,
    Map<String, dynamic>? partialFilterExpression,
    String? name}) {
  if (masterConnection.serverCapabilities.supportsOpMsg) {
    return collection(collectionName).createIndex(
        key: key,
        keys: keys,
        unique: unique,
        sparse: sparse,
        background: background,
        dropDups: dropDups,
        partialFilterExpression: partialFilterExpression,
        name: name);
  }
  return Future.sync(() async {
    var selector = <String, dynamic>{};
    selector['ns'] = '$databaseName.$collectionName';
    keys = _setKeys(key, keys);
    selector['key'] = keys;

    if (unique == true) {
      selector['unique'] = true;
    } else {
      selector['unique'] = false;
    }
    if (sparse == true) {
      selector['sparse'] = true;
    }
    if (background == true) {
      selector['background'] = true;
    }
    if (dropDups == true) {
      selector['dropDups'] = true;
    }
    if (partialFilterExpression != null) {
      selector['partialFilterExpression'] = partialFilterExpression;
    }
    name ??= _createIndexName(keys!);
    selector['name'] = name;
    var insertMessage = MongoInsertMessage(
        '$databaseName.${DbCommand.SYSTEM_INDEX_COLLECTION}', [selector]);
    executeMessage(insertMessage, _writeConcern);
    return getLastError();
  });
}