• MongoDB安装、CURD增改查删操作、应用场景


    NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL"。非关系型的数据存储

    MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

    MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

    MongoDB有数据库、集合、文档三个基本概念分别相当于关系数据库中的数据库、表、行。

    一、MongoDB安装

    MongoDB官网下载地址:https://www.mongodb.org/downloads

    下载完成后点击mongodb-win32-x86_64-2008plus-ssl-3.2.0-signed.msi安装,傻瓜式下一步安装就可以,默认装到 C:Program FilesMongoDBServer3.2in 下。

    微软徽标+R,输入cmd如下命令:

    ”cd C:Program FilesMongoDBServer3.2in“ --version    返回MongoDB shell version:3.2.0  说明安装成功。

    在浏览器里面键入“http://localhost:27017/,出现如下界面,也说明安装成功。

    安装成功后为了方便将mongodb的命令加入到环境变量PATH中

    我的电脑-->右键-->属性;如下图:

    正确添加后,cmd直接输入mongo --version 返回MongoDB shell version:3.2.0 

    二、创建数据目录、日志目录

    MongoDB将数据目录存储在 db 目录下。但是这个数据目录不会主动创建,我们在安装完成后需要创建它(data、db、log文件夹不创建会下面会报错,)。

    数据目录:C:Program FilesMongoDBdatadb

    日志目录:C:Program FilesMongoDBloglog.txt

    执行如下命令:

    mongod --dbpath "C:Program FilesMongoDBdatadb" --logpath "C:Program FilesMongoDBloglog.txt" --logappend

    三、将MongoDB服务器作为Windows服务运行

    执行如下命令:

    mongod  --dbpath "C:Program FilesMongoDBdatadb" --logpath "C:Program FilesMongoDBloglog.txt" --logappend --directoryperdb --serviceName MongoDB --install

    删除服务:mongod.exe --remove --serviceName "MongoDB"

     作为Windows服务启动不了报错:Windows不能在本地计算机启动MongoDB,错误代码 100

    解决方法 :

    1、MongoDB安装目录data将此文件夹下的mongod.lock删除

    2、检查设置数据目录dbpath或日志目录logpath是否正确

     四、MongoDB的CURD操作

    (-)命令操作

    1、插入--cmd,输入mongo命令打开shell,使用testdb。文档必须是一个json的扩展(Bson)形式

    db.person.insert({"name":"joye888","age":"25"})

    db.person.insert({"name":"joye888","age":"26"})

    2、查询-- “_id": 数据库加的GUID主键

    db.person.find()

    3、修改

     update({查询条件},{需要修改的内容})

    4、删除

    db.person.remove({}) -- 删除所有

    db.person.remove({"name":"joye888"})--根据条件删除

     (二)非命令操作

    构造bsonDcument插入

    方式1,直接构造:

     MongoServer dbserver = new MongoClient(connectionStr).GetServer();
                MongoDatabase db = dbserver.GetDatabase(dbName);
                MongoCollection collection = db.GetCollection(collectionName);
                dbserver.Connect();
    
                BsonDocument doc = new BsonDocument();
    
                doc["Age"] = Int32.Parse(txt_Age.Text);
                doc["Name"] = txt_Name.Text;
                doc["Num"] = txt_Num.Text;
                doc["Introduction"] = txt_Introduction.Text;
    
                collection.Insert(doc);

    方式2,通过实体构造:

    var student = new Student
     {
          Age = Int32.Parse(txt_Age.Text),
          Name = txt_Name.Text,
          Num = txt_Num.Text,
          Introduction = txt_Introduction.Text
      };
                
     collection.Insert<Student>(student);

    删除

    关键就是构造删除条件,通过api查到Remove方法的签名:public virtual WriteConcernResult Remove(IMongoQuery query);在网上看到好多写法都是在Remove中传入BsonDocument对象,但是我查源码发现bsonDocument根本没有实现IMongoQuery接口,实现这个接口的是一个叫做QueryDocument的类,同时QueryDocument也继承了BsonDocument对象,而构造BsonDocument和QueryDocument的方式超级多,各种方便,简单写几种:

    比如构造如下条件,delete from table where Age>15 &Age<20;

    相应的mongodb条件写法:{Age:{$gt:15,$lt:20}},下面就来构造这个条件;

    //方式1,直接通过bsonDocument构造:
    
    BsonDocument doc = new BsonDocument
    {
        { "Age",new BsonDocument{{"$gte",10},{"$lte",15}}}
    };
    //方式2,直接通过QueryDocument构造:与1类似
    
      QueryDocument query = new QueryDocument
      {
          { "Age",new QueryDocument{{"$gte",10},{"$lte",15}}}
      };
    //方式3,直接通过反序列化json字符串:
    
      string json = "{ Age:{$gte:10,$lte:15}}";
      var queryJson = BsonSerializer.Deserialize(json, typeof(BsonDocument)) as BsonDocument;
    //个人觉得这种方式挺好,如果你mongodb命令熟悉,这种方式挺适合构造复杂条件的
    
    //方式4:通过Query类,Query是静态类,封装了各种逻辑条件方法,有泛型和泛型两种方式:
    
      var query1 = Query.GT("Age", 10);//大于10;greater than 10
      var query2 = Query.LT("Age", 15);//小于15;less than 15
      var query = Query.And(query1, query2);
    //但是更好的要数泛型方式了:
    
     var query1 = Query<Student>.GTE<Int32>(t => t.Age, 10);
     var query2 = Query<Student>.LTE<Int32>(t => t.Age, 15);
     //var query = Query.And(Query.GTE("Age", 10), Query.LTE("Age", 15));
     var query = Query.And(query1, query2);
    //最后执行Remove方法即可;

    C#的驱动程序都有一个连接池,有效地使用连接到服务器。所以无需调用Connect 或者Disconnect只要交给驱动处理即可(调用Connect 没什么影响,但是调用Disconnect 会关掉连接池所有连接)

    例如:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using MongoDB.Bson;
    using MongoDB.Driver;
    using MongoDB.Driver.Builders;
    
     
    namespace ConsoleApplication1
    {
    
        public class Entity
        {
    
            public ObjectId Id { get; set; }
    
            public string Name { get; set; }
        }
    
       class Program
       {
            static void Main(string[] args)
            {
    
                var connectionString = "mongodb://localhost";
    
                var client = new MongoClient(connectionString);
    
                var server = client.GetServer();
    
                var database = server.GetDatabase("test");
    
                var collection = database.GetCollection<Entity>("entities");
    
                var entity = new Entity { Name = "Tom" };
                collection.Insert(entity);
                var id = entity.Id;
    
    
                var query = Query<Entity>.EQ(e => e.Id, id);
                entity = collection.FindOne(query);
    
                entity.Name = "Dick";
    
                collection.Save(entity);
    
                var update = Update<Entity>.Set(e => e.Name, "Harry");
    
                collection.Update(query, update);
    
                collection.Remove(query);
    
            }
        }
    }
    View Code

    五、MongoDB使用场景:

     适合场景:

    1、用于对象及JSON数据的存储

    2、大尺寸、低价值的数据

    3、缓存,比如考试的题库

    4、日志数据

    不使用的场景:

    1、高度事物性的系统:银行系统

    2、需要高度优化查询的数据

    3、重要的数据

    4、需要复杂SQL解决的问题

    写个批处理,方便开启Mongodb服务器

    @echo
    
    @pause
    
    mongod -repair -dbpath "E:mongodbfiles"
    
    mongod -dbpath "E:mongodbfiles"
    
    @pause

    “mongod -repair -dbpath "E:mongodbfiles"”是为了解决启动时有时会报错“Unclean shutdown detected mongodb”。

    把它拷贝到记事本,保存为.bat文件,然后和mongod.exe放在同一个目录,双击它就OK了。

  • 相关阅读:
    asp.net中插件开发模式说明
    Url路径重写的原理
    Linux上搭建各种环境(一)
    常见Post提交数据方式接口测试
    Jmeter4.0----CSV Data Set Config_使用表格进行参数化(22)
    弱网测试----App
    性能测试基础
    使用fiddler实现手机抓包
    Jmeter4.0----发送邮箱之SMTP Sampler(21)
    Jmeter4.0----发送测试结果到邮箱之邮件观察仪(20)
  • 原文地址:https://www.cnblogs.com/shy1766IT/p/5211713.html
Copyright © 2020-2023  润新知