mongodb.driver
mongodb.driver.core
url: http://dl.mongodb.org/dl/win32/x86_64
*************************************************************************************
将MongoDB数据库安装成为windows一个服务
首先在F:MongoDB目录下新建一个mongod.cfg文件里面加上如下内容
logpath = F:MongoDBlogsMongoDB.log
dbpath = F:MongoDBDATA
一个是日志输出文件一个是数据存放文件
然后再执行 如下命令 mongod --config F:MongoDBmongod.cfg --install
可一步到位
mongod --dbpath "d:mongodbdatadb" --logpath "d:mongodbdatalogMongoDB.log" --install --serviceName "MongoDB"
*************************************************************************************
show collections //显示所有集合
cd d:mongodbin
mongod --dbpath d:mongodbdbdata
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:mongodbdbdata --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