/* Copyright 2010-present MongoDB Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using System;
using MongoDB.Bson;
namespace MongoDB.Driver
{
///
/// Options for creating an index.
///
public class CreateIndexOptions
{
// fields
private bool? _background;
private int? _bits;
private double? _bucketSize;
private Collation _collation;
private string _defaultLanguage;
private TimeSpan? _expireAfter;
private string _languageOverride;
private double? _max;
private double? _min;
private string _name;
private bool? _sparse;
private int? _sphereIndexVersion;
private BsonDocument _storageEngine;
private int? _textIndexVersion;
private bool? _unique;
private int? _version;
private BsonDocument _weights;
// properties
///
/// Gets or sets a value indicating whether to create the index in the background.
///
public bool? Background
{
get { return _background; }
set { _background = value; }
}
///
/// Gets or sets the precision, in bits, used with geohash indexes.
///
public int? Bits
{
get { return _bits; }
set { _bits = value; }
}
///
/// Gets or sets the size of a geohash bucket.
///
public double? BucketSize
{
get { return _bucketSize; }
set { _bucketSize = value; }
}
///
/// Gets or sets the collation.
///
public Collation Collation
{
get { return _collation; }
set { _collation = value; }
}
///
/// Gets or sets the default language.
///
public string DefaultLanguage
{
get { return _defaultLanguage; }
set { _defaultLanguage = value; }
}
///
/// Gets or sets when documents expire (used with TTL indexes).
///
public TimeSpan? ExpireAfter
{
get { return _expireAfter; }
set { _expireAfter = value; }
}
///
/// Gets or sets the language override.
///
public string LanguageOverride
{
get { return _languageOverride; }
set { _languageOverride = value; }
}
///
/// Gets or sets the max value for 2d indexes.
///
public double? Max
{
get { return _max; }
set { _max = value; }
}
///
/// Gets or sets the min value for 2d indexes.
///
public double? Min
{
get { return _min; }
set { _min = value; }
}
///
/// Gets or sets the index name.
///
public string Name
{
get { return _name; }
set { _name = value; }
}
///
/// Gets or sets a value indicating whether the index is a sparse index.
///
public bool? Sparse
{
get { return _sparse; }
set { _sparse = value; }
}
///
/// Gets or sets the index version for 2dsphere indexes.
///
public int? SphereIndexVersion
{
get { return _sphereIndexVersion; }
set { _sphereIndexVersion = value; }
}
///
/// Gets or sets the storage engine options.
///
public BsonDocument StorageEngine
{
get { return _storageEngine; }
set { _storageEngine = value; }
}
///
/// Gets or sets the index version for text indexes.
///
public int? TextIndexVersion
{
get { return _textIndexVersion; }
set { _textIndexVersion = value; }
}
///
/// Gets or sets a value indicating whether the index is a unique index.
///
public bool? Unique
{
get { return _unique; }
set { _unique = value; }
}
///
/// Gets or sets the version of the index.
///
public int? Version
{
get { return _version; }
set { _version = value; }
}
///
/// Gets or sets the weights for text indexes.
///
public BsonDocument Weights
{
get { return _weights; }
set { _weights = value; }
}
}
///
/// Options for creating an index.
///
/// The type of the document.
public class CreateIndexOptions : CreateIndexOptions
{
#region static
// internal static methods
internal static CreateIndexOptions CoercedFrom(CreateIndexOptions options)
{
if (options == null)
{
return null;
}
if (options.GetType() == typeof(CreateIndexOptions))
{
return new CreateIndexOptions
{
Background = options.Background,
Bits = options.Bits,
BucketSize = options.BucketSize,
Collation = options.Collation,
DefaultLanguage = options.DefaultLanguage,
ExpireAfter = options.ExpireAfter,
LanguageOverride = options.LanguageOverride,
Max = options.Max,
Min = options.Min,
Name = options.Name,
Sparse = options.Sparse,
SphereIndexVersion = options.SphereIndexVersion,
StorageEngine = options.StorageEngine,
TextIndexVersion = options.TextIndexVersion,
Unique = options.Unique,
Version = options.Version,
Weights = options.Weights
};
}
return (CreateIndexOptions)options;
}
#endregion
// private fields
private FilterDefinition _partialFilterExpression;
// public properties
///
/// Gets or sets the partial filter expression.
///
public FilterDefinition PartialFilterExpression
{
get { return _partialFilterExpression; }
set { _partialFilterExpression = value; }
}
}
}