parseIndexOptions function
Implementation
Map<String, Object> parseIndexOptions(Object fieldOrSpec) {
var fieldHash = <String, Object>{};
var indexes = <String>[];
Iterable? keys;
// Get all the fields accordingly
if (fieldOrSpec is String) {
// 'type'
indexes.add(_fieldIndexName(fieldOrSpec, '1'));
fieldHash[fieldOrSpec] = 1;
} else if (fieldOrSpec is List) {
for (Object object in fieldOrSpec) {
if (object is String) {
// [{location:'2d'}, 'type']
indexes.add(_fieldIndexName(object, '1'));
fieldHash[object] = 1;
} else if (object is List) {
// [['location', '2d'],['type', 1]]
indexes.add(
_fieldIndexName(object[0] as String, (object[1] ?? '1') as String));
fieldHash[object[0]] = object[1] ?? '1';
} else if (object is Map) {
// [{location:'2d'}, {type:1}]
keys = object.keys;
for (String key in keys) {
indexes.add(_fieldIndexName(key, object[key] as String));
fieldHash[key] = object[key];
}
} else {
// undefined (ignore)
}
}
} else if (fieldOrSpec is Map) {
// {location:'2d', type:1}
keys = fieldOrSpec.keys;
for (String key in keys) {
var indexDirection = '${fieldOrSpec[key]}';
indexes.add(_fieldIndexName(key, indexDirection));
fieldHash[key] = fieldOrSpec[key];
}
}
return {
keyName: indexes.join('_'),
if (keys != null) keyKeys: keys,
keyFieldHash: fieldHash
};
}