Fork me on GitHub
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
posted on 2013-02-06 17:55  HackerVirus  阅读(390)  评论(0)    收藏  举报