zoukankan      html  css  js  c++  java
  • 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了。

  • 相关阅读:
    Infopath Notify 弹出提示信息
    window.showModalDialog 返回值
    【转】获得正文内容中的所有img标签的图片路径
    Json Datable Convert
    Sharepoint 列表 附件 小功能
    Surgey 权限更改
    SQL 触发器用于IP记录转换
    Caml语句 查询分配给当前用户及当前组
    jquery 1.3.2 auto referenced when new web application in VSTS2010(DEV10)
    TFS diff/merge configuration
  • 原文地址:https://www.cnblogs.com/shy1766IT/p/5211713.html
Copyright © 2011-2022 走看看