/// <summary> /// Verify all required <see cref="IMongoIndexKeys"/> are defined and ready to go. /// </summary> protected virtual void VerifyIndexes <TEntity>(MongoCollection <TEntity> collection) { Type entityType = typeof(TEntity); if (IndexTypesByEntityType.ContainsKey(entityType)) { foreach (object untypedIndexType in IndexTypesByEntityType[entityType]) { var mongoIndex = (MongoIndex <TEntity>)untypedIndexType; var indexKeysBuilder = new IndexKeysBuilder(); if (mongoIndex.IsAcending) { indexKeysBuilder = indexKeysBuilder.Ascending(mongoIndex.Selectors.ToArray()); } else { indexKeysBuilder = indexKeysBuilder.Descending(mongoIndex.Selectors.ToArray()); } collection.CreateIndex ( indexKeysBuilder, IndexOptions .SetUnique(mongoIndex.IsUnique) .SetName(mongoIndex.Name) ); } } }
/// <summary> /// 添加索引 /// </summary> /// <param name="IdxOpt"></param> /// <param name="option"></param> /// <param name="currentCollection"></param> /// <returns></returns> public static bool CreateMongoIndex(IndexOption IdxOpt, IndexOptionsBuilder option, MongoCollection currentCollection, ref string errorMessage) { var mongoCol = currentCollection; var indexkeys = new IndexKeysBuilder(); if (!string.IsNullOrEmpty(IdxOpt.GeoSpatialHaystackKey)) { indexkeys.GeoSpatialHaystack(IdxOpt.GeoSpatialHaystackKey); } if (!string.IsNullOrEmpty(IdxOpt.GeoSpatialKey)) { indexkeys.GeoSpatial(IdxOpt.GeoSpatialKey); } if (!string.IsNullOrEmpty(IdxOpt.GeoSpatialSphericalKey)) { indexkeys.GeoSpatialSpherical(IdxOpt.GeoSpatialSphericalKey); } indexkeys.Ascending(IdxOpt.AscendingKey.ToArray()); indexkeys.Descending(IdxOpt.DescendingKey.ToArray()); indexkeys.Text(IdxOpt.TextKey.ToArray()); //CreateIndex失败的时候会出现异常! try { var result = mongoCol.CreateIndex(indexkeys, option); return(result.Response.GetElement("ok").Value.AsInt32 == 1); } catch (Exception ex) { errorMessage = ex.ToString(); return(false); } }
public void CreateIndex <T>(Tuple <string, bool>[] names, bool background = true, TimeSpan ttl = new TimeSpan(), bool unique = false, bool dropDups = false, bool sparse = false) { var ascending = new List <string>(); var descending = new List <string>(); foreach (var n in names) { if (n.Item2) { ascending.Add(n.Item1); } else { descending.Add(n.Item1); } } var builder = new IndexKeysBuilder(); if (ascending.Count > 0) { builder = builder.Ascending(ascending.ToArray()); } if (descending.Count > 0) { builder = builder.Descending(descending.ToArray()); } _database.GetCollection <T>(typeof(T).Name).EnsureIndex(builder, IndexOptions.SetBackground(background) .SetTimeToLive(ttl) .SetUnique(unique) .SetDropDups(dropDups) .SetSparse(sparse)); }
/// <summary> /// 添加索引 /// </summary> /// <param name="AscendingKey"></param> /// <param name="DescendingKey"></param> /// <param name="option"></param> /// <returns></returns> public static Boolean CreateMongoIndex(String[] AscendingKey, String[] DescendingKey, IndexOptionsBuilder option) { MongoCollection mongoCol = SystemManager.GetCurrentCollection(); IndexKeysBuilder indexkeys = new IndexKeysBuilder(); indexkeys.Ascending(AscendingKey); indexkeys.Descending(DescendingKey); mongoCol.CreateIndex(indexkeys, option); return(true); }
public static IndexKeysBuilder GetIndex(TaskQueue.TQItemSelector selector) { IndexKeysBuilder ikb = new IndexKeysBuilder(); foreach (KeyValuePair <string, TaskQueue.TQItemSelectorParam> kv in selector.parameters) { switch (kv.Value.ValueSet) { case TaskQueue.TQItemSelectorSet.Equals: Type kvt = kv.Value.Value.GetType(); if (kvt == typeof(bool)) { if ((bool)kv.Value.Value) { ikb = ikb.Ascending(kv.Key); } else { ikb = ikb.Descending(kv.Key); } } else { ikb = ikb.Ascending(kv.Key); } break; } } foreach (KeyValuePair <string, TaskQueue.TQItemSelectorParam> kv in selector.parameters) { switch (kv.Value.ValueSet) { case TaskQueue.TQItemSelectorSet.Ascending: ikb = ikb.Ascending(kv.Key); break; case TaskQueue.TQItemSelectorSet.Descending: ikb = ikb.Descending(kv.Key); break; } } return(ikb); }
public MongoIndexKeysWarpper Descending(params string[] names) { if (MongoIndexKeys == null) { MongoIndexKeys = IndexKeys.Descending(names); } else { MongoIndexKeys = MongoIndexKeys.Descending(names); } return(this); }
/// <summary> /// 添加索引 /// </summary> /// <param name="AscendingKey"></param> /// <param name="DescendingKey"></param> /// <param name="option"></param> /// <returns></returns> public static Boolean CreateMongoIndex(String[] AscendingKey, String[] DescendingKey, String GeoSpatialKey, IndexOptionsBuilder option) { MongoCollection mongoCol = SystemManager.GetCurrentCollection(); IndexKeysBuilder indexkeys = new IndexKeysBuilder(); if (!String.IsNullOrEmpty(GeoSpatialKey)) { indexkeys.GeoSpatial(GeoSpatialKey); } indexkeys.Ascending(AscendingKey); indexkeys.Descending(DescendingKey); mongoCol.EnsureIndex(indexkeys, option); return(true); }
/// <summary> /// 添加索引 /// </summary> /// <param name="ascendingKey"></param> /// <param name="descendingKey"></param> /// <param name="geoSpatialKey"></param> /// <param name="option"></param> /// <param name="currentCollection"></param> /// <returns></returns> public static bool CreateMongoIndex(string[] ascendingKey, string[] descendingKey, string geoSpatialKey, IndexOptionsBuilder option, MongoCollection currentCollection) { var mongoCol = currentCollection; var indexkeys = new IndexKeysBuilder(); if (!string.IsNullOrEmpty(geoSpatialKey)) { indexkeys.GeoSpatial(geoSpatialKey); } indexkeys.Ascending(ascendingKey); indexkeys.Descending(descendingKey); mongoCol.CreateIndex(indexkeys, option); return(true); }
public void insert() { bool b = db._mongoCollection.Database.CollectionExists("MemberIntegralLock"); this.created = DateTime.Now; db.Insert(this); if (!b) { IndexKeysBuilder keys = new IndexKeysBuilder(); keys.Descending("created"); keys.Ascending("uid"); keys.Ascending("mte"); db._mongoCollection.CreateIndex(keys); } }
/// <summary> /// Ensures that the desired indexes exist and creates them if they don't exist. /// </summary> /// <param name="keynames">The indexed fields.</param> /// <param name="descending">Set to true to make index descending, false for ascending.</param> /// <param name="unique">Set to true to ensure index enforces unique values.</param> /// <param name="sparse">Set to true to specify the index is sparse.</param> /// <remarks> /// This is a convenience method for EnsureIndexes(IMongoIndexKeys keys, IMongoIndexOptions options). /// </remarks> public virtual void EnsureIndexes(IEnumerable <string> keynames, bool descending, bool unique, bool sparse) { var ixk = new IndexKeysBuilder(); if (descending) { ixk.Descending(keynames.ToArray()); } else { ixk.Ascending(keynames.ToArray()); } this.EnsureIndexes(ixk, new IndexOptionsBuilder().SetUnique(unique).SetSparse(sparse)); }
public static IndexKeysBuilder Descending <T>(this IndexKeysBuilder mongoIndexKeys, params Expression <Func <T, object> >[] selectors) { var properties = new List <string>(); foreach (Expression <Func <T, object> > selector in selectors) { var selectorUnaryExpression = selector.Body as UnaryExpression; MemberExpression selectorMemberExpression; if (selectorUnaryExpression != null) { selectorMemberExpression = (MemberExpression)selectorUnaryExpression.Operand; } else { selectorMemberExpression = (MemberExpression)selector.Body; } string memberName = CheckForChildProperty(selectorMemberExpression); properties.Add(memberName); } return(mongoIndexKeys.Descending(properties.ToArray())); }
private void CreateIndexBasicMode() { string indexName = txtBoxIndexName.Text; if (string.IsNullOrWhiteSpace(indexName)) { throw new Exception("Please enter an index name."); } var mongoCollection = MongoCollectionInfo.GetMongoCollection(); var indexes = mongoCollection.GetIndexes(); if (indexes != null && indexes.Any()) { if (indexes.ToList().Exists(i => i.Name == indexName)) { throw new Exception("An index with that name already exists."); } } var keys = GetChoosenKeys(); if (!keys.Any()) { throw new Exception("You must choose at least one key."); } var keyBuilder = new IndexKeysBuilder(); foreach (var key in keys) { if (key.SortType == 1) { keyBuilder = keyBuilder.Ascending(key.Key); } else if (key.SortType == -1) { keyBuilder = keyBuilder.Descending(key.Key); } else if (key.SortType == 2) { keyBuilder = keyBuilder.GeoSpatial(key.Key); } else if (key.SortType == 3) { keyBuilder = keyBuilder.GeoSpatialHaystack(key.Key); } } var optionBuilder = new IndexOptionsBuilder(); optionBuilder.SetUnique(checkBoxUnique.Checked); optionBuilder.SetBackground(checkBoxBackground.Checked); optionBuilder.SetDropDups(checkBoxUnique.Checked && checkBoxDropDups.Checked); optionBuilder.SetSparse(checkBoxSparse.Checked); optionBuilder.SetName(indexName); var writeConcernResult = mongoCollection.CreateIndex(keyBuilder, optionBuilder); if (writeConcernResult.HasLastErrorMessage) { throw new Exception(writeConcernResult.LastErrorMessage); } }