コード例 #1
0
        /// <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)
                    );
                }
            }
        }
コード例 #2
0
        /// <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);
            }
        }
コード例 #3
0
        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));
        }
コード例 #4
0
        /// <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);
        }
コード例 #5
0
ファイル: MongoSelector.cs プロジェクト: jangocheng/TaskMQ
        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);
        }
コード例 #6
0
        public MongoIndexKeysWarpper Descending(params string[] names)
        {
            if (MongoIndexKeys == null)
            {
                MongoIndexKeys = IndexKeys.Descending(names);
            }
            else
            {
                MongoIndexKeys = MongoIndexKeys.Descending(names);
            }

            return(this);
        }
コード例 #7
0
        /// <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);
        }
コード例 #8
0
        /// <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);
        }
コード例 #9
0
        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);
            }
        }
コード例 #10
0
        /// <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));
        }
コード例 #11
0
        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()));
        }
コード例 #12
0
        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);
            }
        }