zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    poj 3666 Making the Grade
    poj 3186 Treats for the Cows (区间dp)
    hdu 1074 Doing Homework(状压)
    CodeForces 489C Given Length and Sum of Digits...
    CodeForces 163A Substring and Subsequence
    CodeForces 366C Dima and Salad
    CodeForces 180C Letter
    CodeForces
    hdu 2859 Phalanx
    socket接收大数据流
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2907836.html
Copyright © 2011-2022 走看看