浏览代码

mongo管理索引

懒得勤快 7 年之前
父节点
当前提交
802c02d5d6

+ 3 - 3
Masuit.Tools.NoSQL.MongoDBClient.Core/Masuit.Tools.NoSQL.MongoDBClient.Core.csproj

@@ -2,7 +2,7 @@
 
   <PropertyGroup>
     <TargetFramework>netstandard2.0</TargetFramework>
-    <Version>1.8.3</Version>
+    <Version>1.8.4</Version>
     <Authors>懒得勤快</Authors>
     <Company>masuit.com</Company>
     <Description>包含MongoDB的所有的增删查改。
@@ -13,8 +13,8 @@
     <PackageTags>Masuit.Tools</PackageTags>
     <PackageReleaseNotes>如有问题请联系QQ:1170397736,或者到项目的github反馈问题。</PackageReleaseNotes>
     <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
-    <AssemblyVersion>1.8.2.0</AssemblyVersion>
-    <FileVersion>1.8.2.0</FileVersion>
+    <AssemblyVersion>1.8.4.0</AssemblyVersion>
+    <FileVersion>1.8.4.0</FileVersion>
   </PropertyGroup>
 
   <ItemGroup>

+ 84 - 0
Masuit.Tools.NoSQL.MongoDBClient.Core/MongoDbClient.cs

@@ -978,5 +978,89 @@ namespace Masuit.Tools.NoSQL.MongoDBClient
         }
 
         #endregion
+
+        #region 索引
+
+        /// <summary>
+        /// 创建索引
+        /// </summary>
+        /// <param name="collection">集合名</param>
+        /// <param name="index">索引键</param>
+        /// <param name="asc"></param>
+        /// <returns></returns>
+        public string CreateIndex(string collection, string index, bool asc = true)
+        {
+            IMongoIndexManager<BsonDocument> mgr = Database.GetCollection<BsonDocument>(collection).Indexes;
+            var list = mgr.List();
+            while (list.MoveNext())
+            {
+                if (!list.Current.Any(doc => doc["name"].AsString.StartsWith(index)))
+                {
+                    return mgr.CreateOne(asc ? Builders<BsonDocument>.IndexKeys.Ascending(doc => doc[index]) : Builders<BsonDocument>.IndexKeys.Descending(doc => doc[index]));
+                }
+            }
+            return String.Empty;
+        }
+
+        /// <summary>
+        /// 更新索引
+        /// </summary>
+        /// <param name="collection">集合名</param>
+        /// <param name="index">索引键</param>
+        /// <param name="asc"></param>
+        /// <returns></returns>
+        public string UpdateIndex(string collection, string index, bool asc = true)
+        {
+            IMongoIndexManager<BsonDocument> mgr = Database.GetCollection<BsonDocument>(collection).Indexes;
+            return mgr.CreateOne(asc ? Builders<BsonDocument>.IndexKeys.Ascending(doc => doc[index]) : Builders<BsonDocument>.IndexKeys.Descending(doc => doc[index]));
+        }
+
+        /// <summary>
+        /// 删除索引
+        /// </summary>
+        /// <param name="collection">集合名</param>
+        /// <param name="index">索引键</param>
+        /// <returns></returns>
+        public void DropIndex(string collection, string index)
+        {
+            Database.GetCollection<BsonDocument>(collection).Indexes.DropOne(index);
+        }
+
+        /// <summary>
+        /// 创建索引
+        /// </summary>
+        /// <param name="collection">集合名</param>
+        /// <param name="index">索引键</param>
+        /// <param name="key"></param>
+        /// <param name="asc"></param>
+        /// <returns></returns>
+        public string CreateIndex<T>(string collection, string index, Expression<Func<T, object>> key, bool asc = true)
+        {
+            IMongoIndexManager<T> mgr = Database.GetCollection<T>(collection).Indexes;
+            var list = mgr.List();
+            while (list.MoveNext())
+            {
+                if (!list.Current.Any(doc => doc["name"].AsString.StartsWith(index)))
+                {
+                    return mgr.CreateOne(asc ? Builders<T>.IndexKeys.Ascending(key) : Builders<T>.IndexKeys.Descending(key));
+                }
+            }
+            return String.Empty;
+        }
+
+        /// <summary>
+        /// 更新索引
+        /// </summary>
+        /// <param name="collection">集合名</param>
+        /// <param name="key"></param>
+        /// <param name="asc"></param>
+        /// <returns></returns>
+        public string UpdateIndex<T>(string collection, Expression<Func<T, object>> key, bool asc = true)
+        {
+            IMongoIndexManager<T> mgr = Database.GetCollection<T>(collection).Indexes;
+            return mgr.CreateOne(asc ? Builders<T>.IndexKeys.Ascending(key) : Builders<T>.IndexKeys.Descending(key));
+        }
+
+        #endregion
     }
 }

+ 84 - 0
Masuit.Tools.NoSQL.MongoDBClient/MongoDbClient.cs

@@ -977,5 +977,89 @@ namespace Masuit.Tools.NoSQL.MongoDBClient
         }
 
         #endregion
+
+        #region 索引
+
+        /// <summary>
+        /// 创建索引
+        /// </summary>
+        /// <param name="collection">集合名</param>
+        /// <param name="index">索引键</param>
+        /// <param name="asc"></param>
+        /// <returns></returns>
+        public string CreateIndex(string collection, string index, bool asc = true)
+        {
+            IMongoIndexManager<BsonDocument> mgr = Database.GetCollection<BsonDocument>(collection).Indexes;
+            var list = mgr.List();
+            while (list.MoveNext())
+            {
+                if (!list.Current.Any(doc => doc["name"].AsString.StartsWith(index)))
+                {
+                    return mgr.CreateOne(asc ? Builders<BsonDocument>.IndexKeys.Ascending(doc => doc[index]) : Builders<BsonDocument>.IndexKeys.Descending(doc => doc[index]));
+                }
+            }
+            return String.Empty;
+        }
+
+        /// <summary>
+        /// 更新索引
+        /// </summary>
+        /// <param name="collection">集合名</param>
+        /// <param name="index">索引键</param>
+        /// <param name="asc"></param>
+        /// <returns></returns>
+        public string UpdateIndex(string collection, string index, bool asc = true)
+        {
+            IMongoIndexManager<BsonDocument> mgr = Database.GetCollection<BsonDocument>(collection).Indexes;
+            return mgr.CreateOne(asc ? Builders<BsonDocument>.IndexKeys.Ascending(doc => doc[index]) : Builders<BsonDocument>.IndexKeys.Descending(doc => doc[index]));
+        }
+
+        /// <summary>
+        /// 删除索引
+        /// </summary>
+        /// <param name="collection">集合名</param>
+        /// <param name="index">索引键</param>
+        /// <returns></returns>
+        public void DropIndex(string collection, string index)
+        {
+            Database.GetCollection<BsonDocument>(collection).Indexes.DropOne(index);
+        }
+
+        /// <summary>
+        /// 创建索引
+        /// </summary>
+        /// <param name="collection">集合名</param>
+        /// <param name="index">索引键</param>
+        /// <param name="key"></param>
+        /// <param name="asc"></param>
+        /// <returns></returns>
+        public string CreateIndex<T>(string collection, string index, Expression<Func<T, object>> key, bool asc = true)
+        {
+            IMongoIndexManager<T> mgr = Database.GetCollection<T>(collection).Indexes;
+            var list = mgr.List();
+            while (list.MoveNext())
+            {
+                if (!list.Current.Any(doc => doc["name"].AsString.StartsWith(index)))
+                {
+                    return mgr.CreateOne(asc ? Builders<T>.IndexKeys.Ascending(key) : Builders<T>.IndexKeys.Descending(key));
+                }
+            }
+            return String.Empty;
+        }
+
+        /// <summary>
+        /// 更新索引
+        /// </summary>
+        /// <param name="collection">集合名</param>
+        /// <param name="key"></param>
+        /// <param name="asc"></param>
+        /// <returns></returns>
+        public string UpdateIndex<T>(string collection, Expression<Func<T, object>> key, bool asc = true)
+        {
+            IMongoIndexManager<T> mgr = Database.GetCollection<T>(collection).Indexes;
+            return mgr.CreateOne(asc ? Builders<T>.IndexKeys.Ascending(key) : Builders<T>.IndexKeys.Descending(key));
+        }
+
+        #endregion
     }
 }

+ 2 - 2
Masuit.Tools.NoSQL.MongoDBClient/Properties/AssemblyInfo.cs

@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
 // 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号
 //通过使用 "*",如下所示:
 // [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.8.4.0")]
-[assembly: AssemblyFileVersion("1.8.4.0")]
+[assembly: AssemblyVersion("1.8.5.0")]
+[assembly: AssemblyFileVersion("1.8.5.0")]

+ 1 - 1
Masuit.Tools/Masuit.Tools.csproj

@@ -50,7 +50,7 @@
     </Reference>
     <Reference Include="Microsoft.CSharp" />
     <Reference Include="Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
-      <HintPath>..\..\MyBlogs\packages\Newtonsoft.Json.11.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
+      <HintPath>..\packages\Newtonsoft.Json.11.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
     </Reference>
     <Reference Include="StackExchange.Redis, Version=1.2.4.0, Culture=neutral, processorArchitecture=MSIL">
       <HintPath>..\packages\StackExchange.Redis.1.2.4\lib\net45\StackExchange.Redis.dll</HintPath>

+ 19 - 8
Test/Program.cs

@@ -1,6 +1,8 @@
-using System;
-using System.Collections.Generic;
-using Masuit.Tools;
+using System.Collections.Generic;
+using System.Linq;
+using Masuit.Tools.NoSQL.MongoDBClient;
+using MongoDB.Bson;
+using MongoDB.Driver;
 
 namespace Test
 {
@@ -51,12 +53,21 @@ namespace Test
 
             //MyClass mc = null;
             //MyClass2 mc2 = mc.Map<MyClass, MyClass2>();
-            Dictionary<string, object> dic = new Dictionary<string, object>();
-            for (int i = 0; i < 100000; i++)
+            //Dictionary<string, object> dic = new Dictionary<string, object>();
+            //for (int i = 0; i < 100000; i++)
+            //{
+            //    string s = string.Empty.CreateShortToken(100);
+            //    Console.WriteLine(s);
+            //    dic.Add(s, s);
+            //}
+
+            var list = MongoDbClient.GetInstance("mongodb://192.168.3.238:27017", "AccountBalance").Database.GetCollection<BsonDocument>("201803-NEO").Indexes.List();
+            while (list.MoveNext())
             {
-                string s = string.Empty.CreateShortToken(100);
-                Console.WriteLine(s);
-                dic.Add(s, s);
+                if (!list.Current.Any(doc => doc["name"].AsString.StartsWith("AccountId")))
+                {
+                    string index = MongoDbClient.GetInstance("mongodb://192.168.3.238:27017", "AccountBalance").Database.GetCollection<BsonDocument>("201803-NEO").Indexes.CreateOne(Builders<BsonDocument>.IndexKeys.Ascending(doc => doc["AccountId"]));
+                }
             }
             //Console.ReadKey();
         }

+ 23 - 0
Test/Test.csproj

@@ -32,6 +32,18 @@
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>
   <ItemGroup>
+    <Reference Include="DnsClient, Version=1.0.7.0, Culture=neutral, PublicKeyToken=4574bb5573c51424, processorArchitecture=MSIL">
+      <HintPath>..\packages\DnsClient.1.0.7\lib\net45\DnsClient.dll</HintPath>
+    </Reference>
+    <Reference Include="MongoDB.Bson, Version=2.5.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\packages\MongoDB.Bson.2.5.0\lib\net45\MongoDB.Bson.dll</HintPath>
+    </Reference>
+    <Reference Include="MongoDB.Driver, Version=2.5.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\packages\MongoDB.Driver.2.5.0\lib\net45\MongoDB.Driver.dll</HintPath>
+    </Reference>
+    <Reference Include="MongoDB.Driver.Core, Version=2.5.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\packages\MongoDB.Driver.Core.2.5.0\lib\net45\MongoDB.Driver.Core.dll</HintPath>
+    </Reference>
     <Reference Include="Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
       <HintPath>..\packages\Newtonsoft.Json.11.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
     </Reference>
@@ -39,9 +51,16 @@
       <HintPath>..\packages\StackExchange.Redis.1.2.4\lib\net45\StackExchange.Redis.dll</HintPath>
     </Reference>
     <Reference Include="System" />
+    <Reference Include="System.Buffers, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.Buffers.4.3.0\lib\netstandard1.1\System.Buffers.dll</HintPath>
+    </Reference>
     <Reference Include="System.Core" />
     <Reference Include="System.IO.Compression" />
     <Reference Include="System.Management" />
+    <Reference Include="System.Runtime.InteropServices.RuntimeInformation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.Runtime.InteropServices.RuntimeInformation.4.0.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>
+      <Private>True</Private>
+    </Reference>
     <Reference Include="System.Xml.Linq" />
     <Reference Include="System.Data.DataSetExtensions" />
     <Reference Include="Microsoft.CSharp" />
@@ -58,6 +77,10 @@
     <None Include="packages.config" />
   </ItemGroup>
   <ItemGroup>
+    <ProjectReference Include="..\Masuit.Tools.NoSQL.MongoDBClient\Masuit.Tools.NoSQL.MongoDBClient.csproj">
+      <Project>{1d45bdc4-74c4-4356-8b93-7f7a09106bb8}</Project>
+      <Name>Masuit.Tools.NoSQL.MongoDBClient</Name>
+    </ProjectReference>
     <ProjectReference Include="..\Masuit.Tools\Masuit.Tools.csproj">
       <Project>{275d5a0d-c49c-497e-a4b5-f40285c2495f}</Project>
       <Name>Masuit.Tools</Name>

+ 6 - 0
Test/packages.config

@@ -1,5 +1,11 @@
 <?xml version="1.0" encoding="utf-8"?>
 <packages>
+  <package id="DnsClient" version="1.0.7" targetFramework="net45" />
+  <package id="MongoDB.Bson" version="2.5.0" targetFramework="net45" />
+  <package id="MongoDB.Driver" version="2.5.0" targetFramework="net45" />
+  <package id="MongoDB.Driver.Core" version="2.5.0" targetFramework="net45" />
   <package id="Newtonsoft.Json" version="11.0.1" targetFramework="net45" />
   <package id="StackExchange.Redis" version="1.2.4" targetFramework="net45" />
+  <package id="System.Buffers" version="4.3.0" targetFramework="net45" />
+  <package id="System.Runtime.InteropServices.RuntimeInformation" version="4.0.0" targetFramework="net45" />
 </packages>