博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.NET平台下使用MongoDB入门教程
阅读量:6559 次
发布时间:2019-06-24

本文共 10035 字,大约阅读时间需要 33 分钟。

 

正文

  适合人群:完全没有接触MongoDB或对MongoDB有一点了解的C#开发人员。因为本文是一篇入门级的文章。

一、了解MongoDB

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

   MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种。

     MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

  MongoDB服务端可运行在、或mac os x平台,支持32位和64位应用,默认端口为27017。推荐运行在64位平台,因为MongoDB在32位模式运行时支持的最大文件尺寸为2GB

  (百度百科)

二、MongoDB特点

  它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:

  1)面向集合存储,易存储对象类型的数据。

  2)模式自由。

  3)支持动态查询。

  4)支持完全索引,包含内部对象。

  5)支持查询。

  6)支持复制和故障恢复。

  7)使用高效的二进制数据存储,包括大型对象(如视频等)。

  8)自动处理碎片,以支持云计算层次的扩展性。

  9)支持RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。

  10)文件存储格式为BSON(一种JSON的扩展)。

  11)可通过网络访问。

  (百度百科)

三、安装及常用命令

3.1 下载安装

MongoDB下载地址:

安装之后目录bin文件夹下会有一堆exe文件

Mongod.exe 连接到mongo数据库服务器的,即服务器端。

Mongo.exe 启动MongoDB shell的,即客户端。

mongodump.exe 逻辑备份工具。

mongorestore.exe 逻辑恢复工具。

mongoexport.exe  数据导出工具。

mongoimport.exe  数据导入工具。

3.2 启动服务器

 新建dbpath用来存储数据文件 随便一个路径都可以,d:\data\db (没有这个目录的话会报错)

 CMD命令启动

3.3 常用操作

双击mongo.exe进行操作

>use DATABASE_NAME //如果数据库不存在,则创建数据库,否则切换到指定数据库。>show dbs //显示所有数据库>show collections //显示当前数据库下的所有集合>db.runoob.insert({"name":"菜鸟教程","taxcode":"123456"}) //添加数据> db.runoob.update({'name':'菜鸟教程'},{'$set':{'taxcode':'test'}},upsert=true,multi=false) //name为菜鸟教程 更新记录taxcode为test>db.runoob.find() //查询数据> db.runoob.remove() //删除所有数据> db.runoob.remove({'name':'菜鸟教程'}) //删除记录name为菜鸟教程>db.dropDatabase() //删除当前数据库

3.4 其他命令

db.AddUser(username,password)  添加用户db.auth(usrename,password)     设置数据库连接验证db.cloneDataBase(fromhost)     从目标服务器克隆一个数据库db.commandHelp(name)           returns the help for the commanddb.copyDatabase(fromdb,todb,fromhost)  复制数据库fromdb---源数据库名称,todb---目标数据库名称,fromhost---源数据库服务器地址db.createCollection(name,{size:3333,capped:333,max:88888})  创建一个数据集,相当于一个表db.currentOp()                 取消当前库的当前操作db.dropDataBase()              删除当前数据库db.eval(func,args)             run code server-sidedb.getCollection(cname)        取得一个数据集合,同用法:db['cname'] ordb.getCollenctionNames()       取得所有数据集合的名称列表db.getLastError()              返回最后一个错误的提示消息db.getLastErrorObj()           返回最后一个错误的对象db.getMongo()                  取得当前服务器的连接对象get the serverdb.getMondo().setSlaveOk()     allow this connection to read from then nonmaster membr of a replica pairdb.getName()                   返回当操作数据库的名称db.getPrevError()              返回上一个错误对象db.getProfilingLevel()         db.getReplicationInfo()        获得重复的数据db.getSisterDB(name)           get the db at the same server as this onewdb.killOp()                    停止(杀死)在当前库的当前操作db.printCollectionStats()      返回当前库的数据集状态db.printReplicationInfo()db.printSlaveReplicationInfo()db.printShardingStatus()       返回当前数据库是否为共享数据库db.removeUser(username)        删除用户db.repairDatabase()            修复当前数据库db.resetError()                db.runCommand(cmdObj)          run a database command. if cmdObj is a string, turns it into {cmdObj:1}db.setProfilingLevel(level)    0=off,1=slow,2=alldb.shutdownServer()            关闭当前服务程序db.version()                   返回当前程序的版本信息db.test.find({id:10})          返回test数据集ID=10的数据集db.test.find({id:10}).count()  返回test数据集ID=10的数据总数db.test.find({id:10}).limit(2) 返回test数据集ID=10的数据集从第二条开始的数据集db.test.find({id:10}).skip(8)  返回test数据集ID=10的数据集从0到第八条的数据集db.test.find({id:10}).limit(2).skip(8)  返回test数据集ID=1=的数据集从第二条到第八条的数据db.test.find({id:10}).sort()   返回test数据集ID=10的排序数据集db.test.findOne([query])       返回符合条件的一条数据db.test.getDB()                返回此数据集所属的数据库名称db.test.getIndexes()           返回些数据集的索引信息db.test.group({key:...,initial:...,reduce:...[,cond:...]})db.test.mapReduce(mayFunction,reduceFunction,
)db.test.remove(query) 在数据集中删除一条数据db.test.renameCollection(newName) 重命名些数据集名称db.test.save(obj) 往数据集中插入一条数据db.test.stats() 返回此数据集的状态db.test.storageSize() 返回此数据集的存储大小db.test.totalIndexSize() 返回此数据集的索引文件大小db.test.totalSize() 返回些数据集的总大小db.test.update(query,object[,upsert_bool]) 在此数据集中更新一条数据db.test.validate() 验证此数据集db.test.getShardVersion() 返回数据集共享版本号

3.5 做成windows服务

mongod.exe --bind_ip 127.0.0.1 --logpath "d:\data\dbConf\mongodb.log" --logappend --dbpath "d:\data\db" --port 27017 --serviceName "myFirst" --serviceDisplayName "myFirst" --install

四、批处理程序开启MongoDB

写批处理程序是为了解决每次启动MongoDB都得敲doc命令

@echo@pausemongod -repair -dbpath "d:\data\db"mongod -dbpath "d:\data\db"@pause

把它复制到记事本,保存为.bat文件,然后和mongod.exe放在同一个目录,以后运行它就可以启动MongoDB服务器了。

PS:“mongod -repair -dbpath "E:\mongodbfiles"”是为了解决启动时有时会报错

五、可视化客户端工具

  用客户端工具是为了解决每次都敲命令的问题,这里推荐两种工具Robomongo、MongoVUE

 

 

 

六、C#中使用MongoDB

 MongoDB.Driver.dll:顾名思义,驱动程序

 MongoDB.Bson.dll:序列化、Json相关

MongoDB帮助类代码:

/******************************************************* *  * 作者:徐文东 * 创建日期:20170510 * 说明:MongoDb帮助类 * 运行环境:.NET 4.0 * 版本号:1.0.0 *  * 历史记录: * 创建文件 徐文东 20170510 11:56 * *******************************************************/using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using MongoDB.Bson;using MongoDB.Driver;using MongoDB.Driver.Core.Servers;using System.Linq.Expressions;namespace DBI.SaaS.ExternalService.BigData{    ///     /// MongoDb帮助类    ///     public class DB    {        private static readonly string connStr = "mongodb://127.0.0.1:27017";//GlobalConfig.Settings["mongoConnStr"];        private static readonly string dbName = "xuwendong";//GlobalConfig.Settings["mongoDbName"];        private static IMongoDatabase db = null;        private static readonly object lockHelper = new object();        private DB() { }        public static IMongoDatabase GetDb()        {            if (db == null)            {                lock (lockHelper)                {                    if (db == null)                    {                        var client = new MongoClient(connStr);                        db = client.GetDatabase(dbName);                    }                }            }            return db;        }    }    public class MongoDbHelper
where T : BaseEntity { private IMongoDatabase db = null; private IMongoCollection
collection = null; public MongoDbHelper() { this.db = DB.GetDb(); collection = db.GetCollection
(typeof(T).Name); } ///
/// 新增 /// ///
///
public T Insert(T entity) { var flag = ObjectId.GenerateNewId(); entity.GetType().GetProperty("Id").SetValue(entity, flag); entity.State = "y"; entity.CreateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); entity.UpdateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); collection.InsertOneAsync(entity); return entity; } ///
/// 修改 /// ///
///
///
public void Modify(string id, string field, string value) { var filter = Builders
.Filter.Eq("Id", ObjectId.Parse(id)); var updated = Builders
.Update.Set(field, value); UpdateResult result = collection.UpdateOneAsync(filter, updated).Result; } ///
/// 更新 /// ///
public void Update(T entity) { try { var old = collection.Find(e => e.Id.Equals(entity.Id)).ToList().FirstOrDefault(); foreach (var prop in entity.GetType().GetProperties()) { var newValue = prop.GetValue(entity); var oldValue = old.GetType().GetProperty(prop.Name).GetValue(old); if (newValue != null) { if (oldValue == null) oldValue = ""; if (!newValue.ToString().Equals(oldValue.ToString())) { old.GetType().GetProperty(prop.Name).SetValue(old, newValue.ToString()); } } } old.State = "n"; old.UpdateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); var filter = Builders
.Filter.Eq("Id", entity.Id); ReplaceOneResult result = collection.ReplaceOneAsync(filter, old).Result; } catch (Exception ex) { var aaa = ex.Message + ex.StackTrace; throw; } } ///
/// 删除 /// ///
public void Delete(T entity) { var filter = Builders
.Filter.Eq("Id", entity.Id); collection.DeleteOneAsync(filter); } ///
/// 根据id查询一条数据 /// ///
///
public T QueryOne(string id) { return collection.Find(a => a.Id == ObjectId.Parse(id)).ToList().FirstOrDefault(); } ///
/// 查询所有数据 /// ///
public List
QueryAll() { return collection.Find(a => a.State != "").ToList(); } ///
/// 根据条件查询一条数据 /// ///
///
public T QueryByFirst(Expression
> express) { return collection.Find(express).ToList().FirstOrDefault(); } ///
/// 批量添加 /// ///
public void InsertBatch(List
list) { collection.InsertManyAsync(list); } ///
/// 根据Id批量删除 /// public void DeleteBatch(List
list) { var filter = Builders
.Filter.In("Id", list); collection.DeleteManyAsync(filter); } ///
/// 未添加到索引的数据 /// ///
public List
QueryToLucene() { return collection.Find(a => a.State.Equals("y")|| a.State.Equals("n")).ToList(); } } public class mongoCustomer : BaseEntity { ///
/// 购方名称 /// public string Name { get; set; } ///
/// 纳税人识别号 /// public string TaxCode { get; set; } ///
/// 地址电话 /// public string AddressPhone { get; set; } ///
/// 开户行及账号 /// public string BankAccount { get; set; } } public abstract class BaseEntity { public ObjectId Id { get; set; } public string State { get; set; } public string CreateTime { get; set; } public string UpdateTime { get; set; } }}

 

七、参考资料

windows平台下安装MongoDB:

 

转载地址:http://fkhco.baihongyu.com/

你可能感兴趣的文章
【java】itext pdf 分页
查看>>
看看这个电脑的配置
查看>>
[转]【NoSQL】NoSQL入门级资料整理(CAP原理、最终一致性)
查看>>
RequireJS进阶(二)
查看>>
我设计的网站的分布式架构
查看>>
linux extract rar files
查看>>
Knockout.Js官网学习(监控属性Observables)
查看>>
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务解决
查看>>
azure之MSSQL服务性能测试
查看>>
Android BitmapFactory.Options
查看>>
前端构建:Less入了个门
查看>>
phonegap(cordova) 自己定义插件代码篇(三)----支付宝支付工具整合
查看>>
linux 批量进行:解压缩某一类压缩文件类型的文件
查看>>
激活modelsim se 10.4 时运行patch_dll.bat不能生成TXT
查看>>
17秋 软件工程 Alpha 事后诸葛亮会议
查看>>
线性空间
查看>>
疑似checkpoint堵塞数据库连接
查看>>
Node.js中针对中文的查找和替换无效的解决方法
查看>>
理解指针的关键
查看>>
如何查看Ubuntu下已安装包版本号
查看>>