MongoDB netcore
mongodb.driver
mongodb.driver.core
url: http://dl.mongodb.org/dl/win32/x86_64
*************************************************************************************
将MongoDB数据库安装成为windows一个服务
首先在F:\MongoDB目录下新建一个mongod.cfg文件里面加上如下内容
logpath = F:\MongoDB\logs\MongoDB.log
dbpath = F:\MongoDBDATA
一个是日志输出文件一个是数据存放文件
然后再执行 如下命令 mongod --config F:\MongoDB\mongod.cfg --install
可一步到位
mongod --dbpath "d:\mongodb\data\db" --logpath "d:\mongodb\data\log\MongoDB.log" --install --serviceName "MongoDB"
*************************************************************************************
show collections //显示所有集合
cd d:\mongodb\bin
mongod --dbpath d:\mongodb\dbdata
mongodb://127.0.0.1:27017
db
show dbs
db.col.insert({a:"fdsfd",b:"fdsfdd",c:"sssss"})
db.col.update({c:"sssss"},{$set:{a:"11111"}})
db.col.insert({a:"fdsfd",b:"fdsfdd",c:"aaaaa"})
db.col.insert({a:"fdsfd",b:"fdsfdd",c:"bbbbb"})
db.col.find()
db.col.remove({_id:ObjectId("5a20b4651771dd2629d3bdd9")})
//C#***************************************************************
var mUpdateDefinition = BsonDocument.Parse("{$set:{'b':'张三'}}");
col.UpdateMany(x => x.a == "a1111", mUpdateDefinition);
var djg= col.DeleteMany(x => x.a == "a441");
var xy = col.Find<object>(x=>true).ToList();
"".ToBsonDocument();
"".ToJson();
*************** server mongod --dbpath d:\mongodb\dbdata --port 20000 --auth
show users
db.dropUser("admin")
db.createUser({user:"admin",pwd:"123456",roles:["readWrite"]})
db.auth("admin","123456")
如何创建用户管理员
用户管理员是第一个要创建的用户。在没有创建任何用户之前,你可以随意创建用户;但数据库中一旦有了用户,那么未登录的客户端就没有权限做任何操作了,除非使用db.auth(username, password)方法登录。
用户管理员的角色名叫 userAdminAnyDatabase,这个角色只能在 admin 数据库中创建。下面是一个例子:
> use admin
switched to db admin
> db.createUser({user:"root",pwd:"root123",roles:["userAdminAnyDatabase"]})
Successfully added user: { "user" : "root", "roles" : [ "userAdminAnyDatabase" ] }
这个例子创建了一个名为 root 的用户管理员。创建完了这个用户之后,我们应该马上以该用户的身份登录:
> db.auth("root","root123")
1
db.auth() 方法返回 1 表示登录成功。接下来我们为指定的数据库创建访问所需的账号。
//const string strconn = "mongodb://127.0.0.1:27017";
const string strconn = "mongodb://admin:123456@127.0.0.1:8099/test";
// MongoDB.Driver.Core
MongoClient ddd = new MongoClient(strconn);
var jg = ddd.GetDatabase("test");
// var col = jg.GetCollection<abc>("c");
var col = jg.GetCollection<abc>("c");
//col.InsertOne(new abc() { a = "a441", b = "bgfdafd11", c = "cfdsad1" });
//col.InsertOne(new abc() { a = "a441", b = "eeeee", c = "sssss" });
//var tmp = col.Find<abc>(x => x.a == "a441" && x.b == "eeeee").ToList();
//var mUpdateDefinition = BsonDocument.Parse("{$set:{'b':'张三'}}");
//var jjj = col.Find(BsonDocument.Parse("{'b':'张三'}")).ToList();
//System.Dynamic.ExpandoObject dd = jjj[0] as ExpandoObject;
//string vvv = dd.ToJson();
//var xy = col.Find<object>(x=>true).ToList();
var xy = col.Find<abc>(x => x.a=="a441").ToList();
// col.UpdateMany(x => x.a == "a1111", mUpdateDefinition);
// var djg = col.DeleteMany(x => x.a == "a441");
// var collection = jg.GetCollection<object>("a");
//collection.InsertOne(new {a="dddddd",x="ddfsfd" });
//collection.Find<object>()
//var fd = jg.GetCollection<String>("col");
-----------------------------------------------------------------
如何创建数据库用户
首先保证你已经以用户管理员的身份登录 admin 数据库。然后用 use 命令切换到目标数据库,同样用 db.createUser() 命令来创建用户,其中角色名为 “readWrite”。
普通的数据库用户角色有两种,read 和 readWrite。顾名思义,前者只能读取数据不能修改,后者可以读取和修改。
下面是一个例子:
> use test
switched to db test
> db.createUser({user:"testuser",pwd:"testpass",roles:["readWrite"]})
Successfully added user: { "user" : "testuser", "roles" : [ "readWrite" ] }
> db.auth("testuser","testpass")
1
这样 MongoDB 的数据安全性就得到保障了,没有登录的客户端将无法执行任何命令。
- show dbs 显示数据库列表
- use dbname 进入dbname数据库,大小写敏感,没有这个数据库也不要紧
- show collections 显示数据库中的集合,相当于表格
- db.<collection_name>.find(); 集合查找方法,参考上面的方式,使用pretty()函数是排版更好看的意思。
而其中find方法很强大,可以组合很多条件查询的方式,如下所示:
- db.collection.find({ "key" : value }) 查找key=value的数据
- db.collection.find({ "key" : { $gt: value } }) key > value
- db.collection.find({ "key" : { $lt: value } }) key < value
- db.collection.find({ "key" : { $gte: value } }) key >= value
- db.collection.find({ "key" : { $lte: value } }) key <= value
- db.collection.find({ "key" : { $gt: value1 , $lt: value2 } }) value1 < key <value2
- db.collection.find({ "key" : { $ne: value } }) key <> value
- db.collection.find({ "key" : { $mod : [ 10 , 1 ] } }) 取模运算,条件相当于key % 10 == 1 即key除以10余数为1的
- db.collection.find({ "key" : { $nin: [ 1, 2, 3 ] } }) 不属于,条件相当于key的值不属于[ 1, 2, 3 ]中任何一个
- db.collection.find({ "key" : { $in: [ 1, 2, 3 ] } }) 属于,条件相当于key等于[ 1, 2, 3 ]中任何一个
- db.collection.find({ "key" : { $size: 1 } }) $size 数量、尺寸,条件相当于key的值的数量是1(key必须是数组,一个值的情况不能算是数量为1的数组)
- db.collection.find({ "key" : { $exists : true|false } }) $exists 字段存在,true返回存在字段key的数据,false返回不存在字度key的数据
- db.collection.find({ "key": /^val.*val$/i }) 正则,类似like;“i”忽略大小写,“m”支持多行
- db.collection.find({ $or : [{a : 1}, {b : 2} ] }) $or或 (注意:MongoDB 1.5.3后版本可用),符合条件a=1的或者符合条件b=2的数据都会查询出来
- db.collection.find({ "key": value , $or : [{ a : 1 } , { b : 2 }] }) 符合条件key=value ,同时符合其他两个条件中任意一个的数据
- db.collection.find({ "key.subkey" :value }) 内嵌对象中的值匹配,注意:"key.subkey"必须加引号
- db.collection.find({ "key": { $not : /^val.*val$/i } }) 这是一个与其他查询条件组合使用的操作符,不会单独使用。上述查询条件得到的结果集加上$not之后就能获得相反的集合。
当然还有插入更新的处理语句也是很特别的。
db.student.insert({name:'student1',subject:['arts','music']})
特别是更新操作需要说明一下,支持常规的$set方法(修改)、$unset方法(移除指定的键),还有原子级的$inc方法(数值增减),$rename方法(重命名字段名称)等等,
db.users.update({"_id" : ObjectId("51826852c75fdd1d8b805801")}, {"$set" : {"hobby" :["swimming","basketball"]}} )
db.users.update({"_id" : ObjectId("51826852c75fdd1d8b805801")},{"$unset" : {"hobby" :1 }} )
db.posts.update({"_id" : ObjectId("5180f1a991c22a72028238e4")}, {"$inc":{"pageviews":1}})
db.students.update( { _id: 1 }, { $rename: { 'nickname': 'alias', 'cell': 'mobile' } }
upsert是一种特殊的更新操作,不是一个操作符。(upsert = up[date]+[in]sert),也就是如果存在则更新,否则就写入一条新的记录操作。这个参数是个布尔类型,默认是false。
db.users.update({age :25}, {$inc :{"age" :3}}, true)
另外,Update可以对Json的集合进行处理,如果对于subject对象是一个集合的话,插入或更新其中的字段使用下面的语句
db.student.update({name:'student5'},{$set:{subject:['music']}},{upsert:true});
如果是记录已经存在,我们可以使用索引数值进行更新其中集合里面的数据,如下所示。
db.student.update({name:'student3'},{$set:{'subject.0':'arts'}});
如果我们先在集合里面增加一个记录,而非替换的话,那么使用$push语句,如下面的语句所示。
db.student.update({name:'student3'},{$push:{'subject':'sports'}})
相反,如果要移除集合里面的某个值,使用$pop操作符,那么语句如下所示
db.student.update({name:'student3'},{$pop:{'subject':1}});
其中索引为1标识最右边的记录,-1标识为最左边的记录。
另外还可以使用$pushAll
和$pullAll来增加/移除一个或多个集合记录,如下代码所示。
db.student.update({name:'student3'},{$pushAll:{'subject':['sports','craft']}})
db.student.update({name:'student3'},{$pullAll:{'subject':['sports','craft']}})
mongodb的数据库的操作还是比较容易理解的,具体可以进一步参考官网里面的介绍。
https://docs.mongodb.org/manual/
https://docs.mongodb.org/getting-started/csharp/client/
http://mongodb.github.io/mongo-csharp-driver/2.2/
http://wiki.jikexueyuan.com/project/the-little-mongodb-book/
3、MongoDB数据库的C#驱动的使用
数据库的C#驱动使用介绍,可以参考:https://docs.mongodb.org/getting-started/csharp/,或者http://mongodb.github.io/mongo-csharp-driver/2.2/,可以下载相关的DLL然后在项目中引用,当前的驱动版本为2.2,一般引入下面几个DLL即可。
- MongoDB.Bson.dll
- MongoDB.Driver.dll
- MongoDB.Driver.Core.dll
MongoDB netcore的更多相关文章
- Docker--部署mongodb+.netcore+nginx
前言 公司租用的阿里云的服务器,每年会更换一次,很麻烦,还容易出问题,想会不会有更方便的方式来迁移服务器,就这样接触到了docker. 参考网上的一些资料,自己琢磨了一段时间,记录下docker的部署 ...
- 基于netcore实现mongodb和ElasticSearch之间的数据实时同步的工具(Mongo2Es)
基于netcore实现mongodb和ElasticSearch之间的数据实时同步的工具 支持一对一,一对多,多对一和多对多的数据传输方式. 一对一 - 一个mongodb的collection对应一 ...
- .netcore mongodb 分页+模糊查询+多条件查询
.netcore MongoDB.Driver 版本才2.8 与aspnet差距太大,网上找很多资料没有现成的代码. public override async Task<PagerList&l ...
- MongoDB入门及 c# .netcore客户端MongoDB.Driver使用
MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系 ...
- Linux~centos上安装.netcore,HelloWorld归来!
对于跨平台的.netCore来说,让它的程序运行在Linux系统上已经成为必然,也是一种趋势,毕竟我们的很多服务都放在linux服务器上(redis,mongodb,myql,fastDFS,luce ...
- .NetCore~Json代替了Xml
回到目录 在进行.netCore时代后,最大的变化就是对Json的使用更加主动,基本代替了之前的XML,像一些用户配置,系统配置,包包配置等都是基于json的,而web.config这个文件基本变成一 ...
- 物联网框架ServerSuperIO在.NetCore实现跨平台的实践路线
正所谓天下大势,不跟风不行.你不跨平台,很low嘛.java说:你们能跨嘛,跨给我看看.C#说:不要强人所难嘛.java说:能部署在云上吗?docker?微服务?C#说:不要强人所难嘛.java说:你 ...
- 一个能够在Asp.Net和Asp.NetCore之间能够互相通讯的Rpc
一.特性 1.跨平台 2.提供负载均衡算法 3.支持ZK服务协调 4.提供了JSON.BinarySerializer.还有自定义的序列化方式 5.客户端提供Socket连接池,以便于快速交互,防止类 ...
- 物联网框架ServerSuperIO.Core(.netcore)跨平台,一套设备驱动通吃嵌入式、上位机、云服务
1. 概述... 2 2. ServerSuperIO.Core跨平台开发环境... 2 3. ServerSuperIO.Core特点... 2 4. Ser ...
随机推荐
- shell中if语句的使用
转载于:https://www.cnblogs.com/aaronLinux/p/7074725.html bash中如何实现条件判断?条件测试类型: 整数测试 字符测试 文件测试 ...
- python socket 传输文件
推荐资料 https://www.cnblogs.com/xiaokang01/p/9865724.html socket传输文件 思路: # 先将报头转换成字符串(json.dumps), 再将字符 ...
- PHP技术栈
本文旨在给要学习 PHP 的新手一个大概的认知轮廓,在心里有个学习的结构,有的放矢,避免走太多弯路.大神请忽略. 入门阶段 预备知识 1.掌握基本HTML.JS.CSS语法:熟悉 Bootstrap. ...
- m0n0防火墙安装配置方法
m0n0防火墙安装配置方法 准备工具: vmware虚拟机 m0n0防火墙安装镜像:M0n0Wall - generic-pc-1.8.1.iso 桥接网卡ip:192.168.43.0/24 hos ...
- vue之ajax
[前言] Vue里发送AJAX有很多工具可以供开发者使用 ①浏览器自带的fetch函数 ②vue之前推荐的vue-resource第三方模块 ③vue官方目前强力推荐的axios第三方模块 axios ...
- 07-C#笔记-运算符
1. 支持++和-- 含义和C++中相同 2. 条件运算 同C++ 3. 位运算 ^ 异或 ~ 取反 4. 支持?:运算 5. 特殊 is 判断对象是否为某一类型. If( Ford is Car) ...
- python nose 自写插件打乱class类中用例执行顺序,但将test_a和test_z排除
在使用nose时,有这样一个需求,用例执行打乱,但部分用例因场景原因必须先执行,这类用例在写用例时人为的加上了test_a或test_z字样 网上找了一圈,都没找到合适的方法,只有自己写插件了 已写完 ...
- ASP.NET中IOC容器Autofac(依赖注入DI 控制反转IOC)
IOC的一个重点是在程序运行中,动态的向某个对象提供它所需要的其他对象.这一点是通过DI来实现的.Autofac则是比较流行的一款IOC容器. IoC和DI有什么关系呢?其实它们是同一个概念的不同角度 ...
- 【JZOJ5738】【20190706】锁屏杀
题目 $n \le 2000 $ 题解 \(B\)的数字可以对1440取模,对三个图分别进行\(dp\)即可 时间复杂度\(O(n\times 1440 \times 10)\) Code #incl ...
- SQL 变形
需求:共有协议X份,已签XX份,待签X份 sql: select count(1) 总记录数, sum(case when XY_STATUS='1' then 1 else 0 end)待签, su ...