查看: 3766|回复: 0

mongodb配置及应用实例

[复制链接]
论坛徽章:
18
2014年世界杯参赛球队: 阿尔及利亚
日期:2014-05-19 08:46:182014年世界杯参赛球队: 阿尔及利亚
日期:2014-07-16 21:28:092014年世界杯参赛球队: 瑞士
日期:2014-06-14 10:18:462014年世界杯参赛球队: 伊朗
日期:2014-06-14 08:17:212014年世界杯参赛球队: 乌拉圭
日期:2014-06-14 06:47:192014年世界杯参赛球队: 加纳
日期:2014-06-04 19:44:072014年世界杯参赛球队:克罗地亚
日期:2014-06-04 06:34:312014年世界杯参赛球队: 科特迪瓦
日期:2014-05-29 20:20:282014年世界杯参赛球队: 科特迪瓦
日期:2014-05-27 22:19:472014年世界杯参赛球队: 瑞士
日期:2014-05-27 18:45:57
跳转到指定楼层
1#
发表于 2012-2-29 16:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
mongbdb是文档型数据库(nosql),可以到http://www.mongodb.org/downloads下载对应版本,这里用的是win下32位的,下载后解压,可以看到bin目录下有很有exe文件,我把文件放到了I盘,并重启名字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
View Code?
namespace mytest
{
    public class Customer
    {
        [MongoId]
        public string CustomerID { get; set; }
        public string CustomerName { get; set; }
        [MongoIgnore]
        public string Address { get; set; }
    }

}<span face="verdana, Arial, Helvetica, sans-serif" style="font-family: verdana,Arial,Helvetica,sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 21px; white-space: normal;">
</span></span>




CustomerBLL
View Code?
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
View Code?
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 face="verdana, Arial, Helvetica, sans-serif" style="font-family: verdana,Arial,Helvetica,sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 21px; white-space: normal;">
</span></span>




Program演示增加功能
View Code?
namespace mytest
{
    class Program
    {
        static void Main(string[] args)
        {

            Customer customer = new Customer();
            customer.CustomerID = 1 + "";
            customer.CustomerName = "GM0";
            customer.Address = "测试";

            CustomerBLL.Insert(customer);

            customer.CustomerID = 2 + "";
            customer.CustomerName = "GM1";

            CustomerBLL.Insert(customer);

        }


    }

}




这里用了园友的DBHelper操作类,更多详细介绍http://www.cnblogs.com/fish-li/archive/2011/06/26/2090800.html
执行过后如何查看结果呢,mongodb提供了Javascript shell

相应命令都很直译,就不解释了...
mongodb的索引
View Code?
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);
        }
    }
}




测试截图


此文章转自http://www.cnblogs.com/ygm125/archive/2011/08/30/2159786.html



您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表