zoukankan      html  css  js  c++  java
  • MongoDB

    1、 MongoDb 简介

    MongoDB 是为互联网而生的数据库,是文档数据库。
     
    MongoDB 的优点: 1) Schema-less,不需要预先定义表结构,同一个“表”中可以保存多个格式的数据; 2) 数据支持嵌套,数据以 json 格式存储; 3) 允许使用 JavaScript 写服务端脚本,类似于存储过程; 4) 支持 Map/Reduce; 5) MongoDB 支持地理位置索引,可以直接用于位置距离计算和查询,实现“附近的人”、 “滴滴打车接单”等很容易;
     
    MongoDB 的缺点: 1) Mongodb 没有“数据一致性检查”、“事务”等,不适合存储对数据事务要求高(比如金 融)的数据;只适合放非关键性数据(比如日志或者缓存)。 2) 关联查询很弱,不适合做报表查询
     
    2、 MongoDB 服务器的安装

    Windows 下安装: https://www.mongodb.com/  到 download 的地方下载,下载【Community Server】,里 面有各种操作系统下的安装方法。 生产环境肯定要是 Windows-Server,但是在测试学习阶段,如果你电脑是 Win7/8/10, 那么下载“Windows Server 2008 64-bit, without SSL support x64”就行,是支持 Win7 以上 64 位系统的。 mongodb 默认使用 C:datadb作为数据文件夹,需要先创建这个文件夹,然后启动

    C:Program FilesMongoDBServerxxxin 下的 mongod.exe,这样服务器就启动起来了,如果 启动出错一闪而过,那么 cmd 去执行,就能看到报错信息。
     
     把 MongoDB 安装成 windows 服务的方法: 1) 创建一个配置文件 mongod.cfg,在 C:Program FilesMongoDBServer3.4in 下,内容是: systemLog:     destination: file     path: c:datalogmongod.log storage:     dbPath: c:datadb 把配置文件中的文件夹创建起来。 2) 注册成系统服务:mongod --config "C:Program FilesMongoDBServer3.4inmongod.cfg" –install 3) 启动服务 net start MongoDB
     
    windows 安装方法 https://docs.mongodb.com/master/tutorial/install-mongodb-on-windows/ Ubuntu 安装方法 https://docs.mongodb.com/master/tutorial/install-mongodb-on-ubuntu/
     
    3、 MongoDB GUI 客户端

    MongoDB 客户端有很多,有免费的、有收费的,这里推荐一个 Robo 3T,提供下载地址:。。。 因为官网的下载地址下载太慢

    4、 .Net 连接 MongoDB

    安装.Net 驱动:Install-Package MongoDB.Driver
     
    数据插入: MongoClient client = new MongoClient("mongodb://localhost"); IMongoDatabase database = client.GetDatabase("TestDb1");//相当于数据库 IMongoCollection< Person> collection = database.GetCollection<Person>("Persons");//大致相当 于“表” Person p1 = new Person(); p1.Id = 1; p1.Name = "rupeng"; p1.Age = 5; collection.InsertOne (p1);//也支持异步方法,后面建议都用异步的!习惯成自然!
     
    回到客户端工具刷新一下,就能看到新插入的数据,MongoDB 会自动创建“数据库” 以及 Collection(约等于“表”)。MongoDB 默认用 id 做主键,因此不用显式指定 id 是主键。  MongoDB 中没有内置“自增字段”,可以把 Id 声明为 ObjectId 类型(using MongoDB.Bson) 这样插入以后就自动给字段赋值。 class Person {  public int Id { get; set; }  public string Name { get; set; }  public int Age { get; set; } }

    IMongoCollection<Dog> dogs = database.GetCollection<Dog>("Dogs"); Dog d1 = new Dog(); d1.Age = 33; d1.Name = "jacky"; dogs.InsertOne(d1);  
     
     MongoDB 是用 json 保存的,因此也可以直接以 json 格式插入,用 BsonDocument 来代 表: IMongoCollection<BsonDocument> dogs = database.GetCollection<BsonDocument>("Dogs"); string json = "{id:8889,Age:81,Name:'japan',gender:true}"; BsonDocument p1 = BsonDocument.Parse(json); dogs.InsertOne(p1);
     
    还可以插入有嵌套关系的对象,比如学生和老师,注意不会有表间关系,都是存到一个集合 中,注意和关系库不一样。

    5、 查询

    IMongoCollection<Person> collection = database.GetCollection<Person>("Persons"); var filter1 = Builders<Person>.Filter.Gt(p=>p.Age,5);//Gt:大于。 using (var personsCursor = await collection.FindAsync<Person>(filter1)) {  while (personsCursor.MoveNext())  {   var persons = personsCursor.Current;   foreach (var p in persons)   {    MessageBox.Show(p.Name);   }  } }  为什么 FindAsync 不直接返回集合,而是要 MoveNext 之后返回一个集合呢?因为返回 的数据量可能很大,因此 MongoDB 是分批下载,下载一批之后执行 GET_More 操作返回下 一批。可以通过 FindOptions 参数的 BatchSize 设置每一批的大小。  如果确认返回的数据量 不大,可以 var ps = await personsCursor.ToListAsync()(或者 ToEnumerable()等)一下子返回所有数据。还有 Any、First、FirstOrDefault 等以及异步操作。  需要注意 MongoDB 中查询区分大小写。

    6、 数据过滤

      过滤条件可以写成:var filter1 = Builders<Person>.Filter.Gt(“Age”,5);或者  除了 Gt,还有 Gte、In、Lt、Lte、Ne、Nin、Near、NearSphere、Or、Where、And、Not。  当然最常用的还是 Where 操作: var filter1 = Builders<Person>.Filter.Where(p => p.Age >= 5 && p.Name == "rupeng"); using (var personsCursor = await collection.FindAsync(filter1)) {foreach (var p in await personsCursor.ToListAsync())  {   MessageBox.Show(p.Name);  } }

    7、 分页获取

    FindOptions<Person,Person> findOpt = new FindOptions<Person, Person>(); findOpt.Limit = 5;//取最多几条 findOpt.Skip = 2;//跳过几条 var filter1 = Builders<Person>.Filter.Where(p => p.Age >= 5 && p.Name == "rupeng"); using (var personsCursor = await collection.FindAsync(filter1, findOpt)) {  foreach (var p in await personsCursor.ToListAsync())  {   MessageBox.Show(p.Name);  } }  指定排序规则: findOpt.Sort = Builders<Person>.Sort.Ascending(p => p.Age).Descending(p => p.Name);

    8、 Bson

    如果用 BsonDocument,有一些操作还是比较麻烦的: IMongoCollection<BsonDocument> persons = database.GetCollection<BsonDocument>("Persons"); var filter1 = Builders<BsonDocument>.Filter.Gt("Age", 5); using (var personsCursor = await persons.FindAsync(filter1)) {  foreach (var p in await personsCursor.ToListAsync())  {   MessageBox.Show(p.GetValue("Name").AsString);  } }

    9、 更新数据

    IMongoCollection<Person> teachers = database.GetCollection<Person>("Persons"); var filter = Builders<Person>.Filter.Where(p => p.Age <= 5); var update = Builders<Person>.Update  .Set(p=>p.Age,8); teachers.UpdateMany(filter, update);
     
    10、 删除数据

    IMongoCollection<Person> teachers = database.GetCollection<Person>("Persons"); var filter = Builders<Person>.Filter.Where(p => p.Age <= 5); teachers.DeleteMany(filter);   用 Update 机会比较少,如果频繁的用 Update 可能意味着用错了;也不要想着 join、group by, 还是场景不对!用 MongoDB 做一个分布式日志系统。

    11、 MongoDB 应用场景

    日志记录系统;设备监控数据的存储;饿了么外卖骑手接单; 存储商品、商家信息;网站评论信息;存储爬虫爬过来的第三方数据; 但是像订单、金融交易、游戏装备等这些关键信息不要用 MongoDB;

  • 相关阅读:
    致此时的自己
    感悟
    Do what you love VS Love what you do
    感悟
    JavaScript中关于date对象的一些方法
    悟透JavaScript——学习心得
    JavaScript中关于string对象的一些方法
    JavaScript中的简单语句
    w3school CSS基础教程
    SMACSS——Scalable & Modular Architecture for CSS
  • 原文地址:https://www.cnblogs.com/hudean/p/12698873.html
Copyright © 2011-2022 走看看