public AutoMapIndexDefinition(string collection, IndexField[] fields)
            : base(IndexNameFinder.FindMapIndexName(new[] { collection }, fields), new[] { collection }, IndexLockMode.Unlock, fields)
        {
            if (string.IsNullOrEmpty(collection))
            {
                throw new ArgumentNullException(nameof(collection));
            }

            if (fields.Length == 0)
            {
                throw new ArgumentException("You must specify at least one field.", nameof(fields));
            }
        }
        public AutoMapReduceIndexDefinition(string[] collections, IndexField[] mapFields, IndexField[] groupByFields)
            : base(IndexNameFinder.FindMapReduceIndexName(collections, mapFields, groupByFields), collections, IndexLockMode.Unlock, mapFields)
        {
            foreach (var field in mapFields)
            {
                if (field.Storage != FieldStorage.Yes)
                {
                    throw new ArgumentException($"Map-reduce field has to be stored. Field name: {field.Name}");
                }
            }

            foreach (var field in groupByFields)
            {
                if (field.Storage != FieldStorage.Yes)
                {
                    throw new ArgumentException($"GroupBy field has to be stored. Field name: {field.Name}");
                }
            }

            GroupByFields = groupByFields.ToDictionary(x => x.Name, x => x, StringComparer.OrdinalIgnoreCase);;
        }