• MongoDb的增删改查


    因为项目可能要上MongoDb,所以前几周对MongoDb作了一些了解,具体参照内容来自  于http://www.cnblogs.com/lipan/archive/2011/03/08/1966463.html的系列博客,至于安装服务则参照了其他博客,地址未搜藏。

      作为存储数据的载体,其操作不外乎增删改查四项,所以我对其功能在做了简单的调试,至于并发之类的线程问题并未做具体工作。 

      在阅读了上面的博客之后,我首先做了一个类似SqlHelper的MongoDbHelper类(为了方便,并未做config配置,直接是默认路径):

      

    复制代码
    public class MongoDbHelper
        {
            /// <summary>
            /// 获取Mongo实体
            /// </summary>
            /// <param name="connStr">连接字符串</param>
            /// <returns>Mongo实体</returns>
         public static Mongo GetMongo(string connStr)
            {
                connStr = connStr == null ? "mongodb://localhost" : connStr;
                try
                {
                    return new Mongo(connStr);
                }
                catch
                {
                    return null;
                }
            }
    
         /// <summary>
            /// 获取数据库
            /// </summary>
            /// <param name="mongo">Mongo实体</param>
            /// <param name="dbName">数据库名称</param>
            /// <returns>数据库</returns>
         public static IMongoDatabase GetMongoDb(Mongo mongo, string dbName)
            {
                dbName = dbName == null ? "defaultDatabase" : dbName;
                try
                {
                    return mongo.GetDatabase(dbName);
                }
                catch
                {
                    return null;
                }
            }
    
         /// <summary>
            /// 获取数据库集合
            /// </summary>
            /// <param name="connStr">连接字符串</param>
            /// <param name="dbName">数据库名</param>
            /// <param name="collectionName">集合名</param>
            /// <returns>集合</returns>
         public static IMongoCollection<Document> GetMonogoCollection(IMongoDatabase mongoDb, string collectionName)
            {
                collectionName = collectionName == null ? "defaultCollection" : collectionName;
                try
                {
                    return mongoDb.GetCollection<Document>(collectionName);
                }
                catch
                {
                    return null;
                }
            }
    }
    复制代码

    值得一提的是MongoDb的速度,一百万条数据总共花了100秒左右,平均每秒10000条。 

    随后就在main中就对mongoDb进行插入操作添加数据:

    复制代码
      class Program
        {
            static void Main(string[] args)
            {
                Mongo mongo = MongoDbHelper.GetMongo(null);
                IMongoDatabase mongoDb = MongoDbHelper.GetMongoDb(mongo,null);
                IMongoCollection<Document> docCollection = MongoDbHelper.GetMonogoCollection(mongoDb,null);
                mongo.Connect();
                Document doc;
                List<Document> docList = new List<Document>();
                for (int i = 0; i < 1000000; i++)
                {
                    doc = new Document();
                    doc["Id"] = i;
                    doc["Name"] = "aaaaa" + i.ToString();
                    docList.Add(doc);
                }
    
                for (int i = 0; i < docList.Count; i++)
                {
                    docCollection.Insert(docList[i]);
                }
    mongo.Dispose();
                mongo.Disconnect();
                Console.WriteLine("ok");
                Console.ReadKey();
            }
        }
    复制代码

      完成之后,重新修改了main函数分别利用lambda语句对其进行了删、查、改的操作:

    复制代码
      class Program
        {
            static void Main(string[] args)
            {
                Mongo mongo = MongoDbHelper.GetMongo(null);
                IMongoDatabase mongoDb = MongoDbHelper.GetMongoDb(mongo,null);
                IMongoCollection<Document> docCollection = MongoDbHelper.GetMonogoCollection(mongoDb,null);
                mongo.Connect();
                
                //单条删除
                docCollection.Remove(new Document("Id", 1));
                //单条查找
                Document doca = docCollection.FindOne(new Document { { "Id", 2 } });
                //单条修改
                docCollection.Update(new Document("Id", 1), new Document("Id", 10000));
                
                //批量删除
                docCollection.Remove(d => (int)d["Id"] > 900000);                       
                //批量查找
                ICursor<Document> docss = docCollection.Find(d => (int)d["Id"] < 30);
                //批量修改
                docCollection.UpdateAll(new Document { { "Names", "hahaha" } }, d => (int)d["Id"] < 5);
                
                mongo.Disconnect();
                Console.WriteLine("ok");
                Console.ReadKey();
            }
        }
    复制代码

      总体来说,mongoDb的操作与sqlserver的操作有很大相似度,只是有一点内容本人现在依旧不明,望大神解惑:

      mongoDb的大小问题,在数据被remove之后mongoDb产生的文件不会减小,不知道会不会一直增大,直至超过2G,最终使程序崩溃(本人一直都是使用的x86系统)?

     
     
    分类: 外部插件
    标签: MongoDb
  • 相关阅读:
    Educational Codeforces Round 22 C. The Tag Game
    Codeforces Round #421 (Div. 1) B. Mister B and PR Shifts(技巧)
    Codeforces Round #422 (Div. 2) D. My pretty girl Noora
    Codeforces Round #422 (Div. 2) C. Hacker, pack your bags!
    hdu3756(三分)
    hihocoder1496(高维前缀和)
    AOJ731(不等式)
    UVALive7042(博弈论)
    Codeforces 284E(概率)
    hdu4778(状态压缩dp)
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2907836.html
Copyright © 2020-2023  润新知