/// <summary> /// Creates and index if it doesn't already exist with options, e.g. ensure unique. Does not compare index options so a change to these must be handled manually. /// </summary> protected void EnsureIndexExists <TDocument>(IMongoCollection <TDocument> collection, CreateIndexOptions indexOptions, params string[] keyNames) { ConcurrentDictionary <string, object> indexes; List <IndexKeysDefinition <TDocument> > indexFields = new List <IndexKeysDefinition <TDocument> >(); foreach (string item in keyNames) { indexFields.Add(Builders <TDocument> .IndexKeys.Ascending(item)); } IndexKeysDefinition <TDocument> index; if (indexFields.Count > 1) { index = Builders <TDocument> .IndexKeys.Combine(indexFields); } else { index = indexFields[0]; } if (!_IndexCache.TryGetItem(collection.CollectionNamespace.FullName, out indexes)) { indexes = new ConcurrentDictionary <string, object>(); _IndexCache.Add(collection.CollectionNamespace.FullName, indexes); } StringBuilder indexNameBuilder = new StringBuilder(); foreach (string item in keyNames) { if (indexNameBuilder.Length > 0) { indexNameBuilder.Append("|"); } indexNameBuilder.Append(item); } string indexName = indexNameBuilder.ToString(); if (!indexes.ContainsKey(indexName)) { //if (!collection.Indexes.Exists(keyNames)) //nolonger supported, now only can get list of indexes { if (indexOptions == null) { collection.Indexes.CreateOne(index); } else { collection.Indexes.CreateOne(index, indexOptions); } } indexes.TryAdd(indexName, null); } }
public PSKIdentity GetPSKIdentity(string identity) { PSKIdentity result = null; if (!_PSKIdentities.TryGetItem(identity, out result)) { IMongoDatabase database = GetDatabase(DATABASE_NAME, true); IMongoCollection <BsonDocument> collection = database.GetCollection <BsonDocument>(COLLECTION_NAME); BsonDocument doc = collection.Find(Builders <BsonDocument> .Filter.Eq("_id", identity)).FirstOrDefault(); result = LoadPSKIdentityFromDoc(doc); _PSKIdentities.Add(identity, result); } return(result); }
public AccessKey GetAccessKey(string key) { AccessKey result; if (!_AccessKeys.TryGetItem(key, out result)) { IMongoDatabase database = GetDatabase(DATABASE_NAME, false); IMongoCollection <BsonDocument> collection = database.GetCollection <BsonDocument>("AccessKey"); BsonDocument doc = collection.Find(Builders <BsonDocument> .Filter.Eq("_id", key)).FirstOrDefault(); if (doc != null) { result = LoadAccessKey(doc); } _AccessKeys.Add(key, result); } return(result); }