Ejemplo n.º 1
0
        /// <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);
            }
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }