mongodb配置及应用实例



mongbdb是文档型数据库(nosql),可以到http://www.mongodb.org/downloads下载对应版本

第一步:下载安装包:如果是win系统,注意是64位还是32位版本的,请选择正确的版本。

第二步:新建目录“D:\MongoDB”,解压下载到的安装包,找到bin目录下面全部.exe文件,拷贝到刚创建的目录下。

第三步:在“D:\MongoDB”目录下新建“data”文件夹,它将会作为数据存放的根文件夹。


现在打开命令行窗口并切换到mongo存放目录,mongod启动服务,如图

这里用到了--dbpath data指定数据文件存放的目录,这就是前面新建的data文件夹,它不会自动创建,如果不指定存放路径(--dbpath data)仅用mongod启动,需要在当前盘符的根目录创建data/db文件夹,它会自动查找,当看到最后的端口号就说明启动成功了!

当然每次启动都比较麻烦,可以定制成windows服务,我们在data文件夹下创建俩个子文件夹如图

以管理员身份打开命令行窗口并切换到mongodb所在目录,执行命令如图

--directoryperdb说明是否为每一个数据库创建一个文件夹,最后--install安装(注意设置--logpath时要指定一个.log文件,不存在会自动创建)。

看到 command line via 'net start "MongoDb"'说明定制成功,输入

net start MongoDB启动服务

net stop MongoDB停止服务

sc delete MongoDB删除服务或运行→regedit→注册表编辑器→HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services找到相应服务删除即可

现在打开http://127.0.0.1:27017/可以看到

也可以打开http://127.0.0.1:28017/看一些服务端状态信息

扯了这么多还是直接实例来操作数据库吧,这里我用的是c#驱动,光c#就有很多种,很多人都喜欢用samus驱动,因为支持linq语法,这里也选择此驱动,下载地址https://github.com/samus/mongodb-csharp

如果下载的直接是.dll文件添加引用即可,如果是源码,编译下在引用.dll即可,目录结构

Customer

namespace mytest
{
     public class Customer
     {
         [MongoId]
         public string CustomerID { get ; set ; }
         public string CustomerName { get ; set ; }
         [MongoIgnore]
         public string Address { get ; set ; }
     }
 
}<span style= "font-family: verdana, Arial, Helvetica, sans-serif;" face= "verdana, Arial, Helvetica, sans-serif" ><span class = "Apple-style-span" style= "line-height: 21px; font-size: 14px; white-space: normal;" >
</span></span>

CustomerBLL

namespace mytest
{
     public class CustomerBLL
     {
 
         public static void Insert(Customer customer)
         {
             using (MGHelper mm = new MGHelper())
             {
                 mm.GetCollection<Customer>().Insert(customer);
             }
         }
 
         public static void Delete( string customerId)
         {
             using (MGHelper mm = new MGHelper())
             {
                 mm.GetCollection<Customer>().Remove(x => x.CustomerID == customerId);
             }
         }
 
         public static void Update(Customer customer)
         {
             using (MGHelper mm = new MGHelper())
             {
                 mm.GetCollection<Customer>().Update(customer, (x => x.CustomerID == customer.CustomerID));
             }
         }
 
         public static Customer GetById( string customerId)
         {
             using (MGHelper mm = new MGHelper())
             {
                 return mm.GetCollection<Customer>().FindOne(x => x.CustomerID == customerId);
             }
         }
     }
 
}

MGHelper

namespace mytest
{
     public class MGHelper : IDisposable
     {
 
         private Mongo _mongo;
         private IMongoDatabase _db;
 
         public MGHelper()
             : this ( "Server=127.0.0.1" , "test" )
         {
         }
 
 
         public MGHelper( string connectionString, string dbName)
         {
             if ( string .IsNullOrEmpty(connectionString))
                 throw new ArgumentNullException( "connectionString" );
             _mongo = new Mongo(connectionString);
             _mongo.Connect();
             if ( string .IsNullOrEmpty(dbName) == false )
                 _db = _mongo.GetDatabase(dbName);
         }
 
         public IMongoDatabase UseDb( string dbName)
         {
             if ( string .IsNullOrEmpty(dbName))
                 throw new ArgumentNullException( "dbName" );
 
             _db = _mongo.GetDatabase(dbName);
             return _db;
         }
 
         public IMongoDatabase CurrentDb
         {
             get
             {
                 if (_db == null )
                     throw new Exception( "当前连接没有指定任何数据库。请在构造函数中指定数据库名或者调用UseDb()方法切换数据库。" );
                 return _db;
             }
         }
 
         /// <summary>
         /// 获取当前连接数据库的指定集合【依据类型】
         /// </summary>
         /// <typeparam name="T"></typeparam>
         /// <returns></returns>
         public IMongoCollection<T> GetCollection<T>() where T : class
         {
             return this .CurrentDb.GetCollection<T>();
         }
 
         /// <summary>
         /// 获取当前连接数据库的指定集合【根据指定名称】
         /// </summary>
         /// <typeparam name="T"></typeparam>
         /// <param name="name">集合名称</param>
         /// <returns></returns>
         public IMongoCollection<T> GetCollection<T>( string name) where T : class
         {
             return this .CurrentDb.GetCollection<T>(name);
         }
 
         public void Dispose()
         {
             if (_mongo != null )
             {
                 _mongo.Dispose();
                 _mongo = null ;
             }
         }
     }
}<span style= "font-family: verdana, Arial, Helvetica, sans-serif;" face= "verdana, Arial, Helvetica, sans-serif" ><span class = "Apple-style-span" style= "line-height: 21px; font-size: 14px; white-space: normal;" >
</span></span>

Program演示增加功能

这里用了园友的DBHelper操作类,更多详细介绍http://www.cnblogs.com/fish-li/archive/2011/06/26/2090800.html

执行过后如何查看结果呢,mongodb提供了Javascript shell

相应命令都很直译,就不解释了...

mongodb的索引

namespace mytest
{
     class Program
     {
         static void Main( string [] args)
         {
             TestMongodb tm = new TestMongodb();
             tm.InsertMongo();
             tm.Start();
             Console.ReadLine();
         }
     }
 
     public class TestMongodb
     {
         private Mongo mongo;
         private MongoDatabase mongoDatabase;
         private MongoCollection<Document> mongoCollection;
 
         public TestMongodb()
         {
             mongo = new Mongo( "mongodb://localhost" );
             mongoDatabase = mongo.GetDatabase( "testDB" ) as MongoDatabase;
             mongoCollection = mongoDatabase.GetCollection<Document>( "testCollection" ) as MongoCollection<Document>;
             mongo.Connect();
         }
 
         ~TestMongodb()
         {
             mongo.Disconnect();
         }
 
         //插入数据
         public void InsertMongo()
         {
             var random = new Random();
             TimeSpan span = new TimeSpan(DateTime.Now.Ticks);
             for ( int i = 0; i < 100000; i++)
             {
                 Document doc = new Document();
                 doc[ "ID" ] = i;
                 doc[ "Data" ] = "data" + random.Next(10000);
                 mongoCollection.Save(doc);
             }
             TimeSpan span1 = new TimeSpan(DateTime.Now.Ticks);
 
             string op = string .Format( "执行了{0}秒,共插入{1}条数据" , span1.Subtract(span).Duration().Seconds, mongoCollection.FindAll().Documents.Count());
             Console.WriteLine(op);
         }
         //删除数据
         public void RemoveMongo()
         {
             mongoCollection.Remove(x => true );
         }
 
         //创建索引
         public void CreateIndex( string index)
         {
             mongoCollection.Metadata.CreateIndex( new Document() { { "_" + index + "_" , 1 } }, false );
         }
         //删除索引
         public void DropIndex( string index)
         {
             mongoCollection.Metadata.DropIndex( "_" + index + "_" );
         }
 
         //排序
         public void SortForData()
         {
             mongoCollection.FindAll().Sort( new Document() { { "Data" , 1 } });
         }
 
         public void Start()
         {
             Stopwatch watch = new Stopwatch();
             watch.Start();
             SortForData();
             Console.WriteLine( "无索引排序时间:" + watch.Elapsed);
 
             CreateIndex( "Data" );
 
             Stopwatch watch1 = new Stopwatch();
             watch1.Start();
             SortForData();
             Console.WriteLine( "有索引排序时间:" + watch1.Elapsed);
         }
     }
}

测试截图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值