一、下载·安装·启动
学习mongoDB第一步下载安装,度娘有教程不详细解释,说一下重要的点。
1 解压安装包后创建数据库文件的存放位置,例如:d:/mongodb/data/db;
2 启动:D:/mongodb/bin>mongod --dbpath D:\mongodb\data\db;
可见使用的端口是27017,启动成功;另一种查看办法,访问http://localhost:27017 。
3 可以设置日志的存放位置。
(1)新建文件D:\mongodb\log\mongo.log;
(2)新建配置文件D:\mongodb\mongo.config
内容:
dbpath=D:\mongodb\data\db
logpath=D:\mongodb\log\mongo.log
(3)配置:管理员身份 D:\mongodb\bin>mongod --config D:\mongodb\mongo.config。
(services.msc命令可以查看修改各服务的状态)
二、进入数据库(新启动一个窗口)
mongo; 进入 exit; 退出
show dbs; 查看数据库s
use xxdb; 使用**数据库
show collections; 查看集合
三 mongoD设置用户名密码
MongoDB默认设置为无权限访问限制,所以上面可以直接进入,而不需要用户名,密码。
show dbs;
use admin; 你可以发现一个system.user表, 这就是用户表,存放超级管理员的。
db.createUser('ab','ab');
想要使用用户名密码登录,还需要修改启动方式,重新启动并在原来的基础上增加 -auth
D:/mongodb/bin>mongod --dbpath D:\mongodb\data\db -auth
这时已经不能查看集合的内容了。
db.auth('ab','ab'); 使用账号密码登录 成功返回1,失败返回0
单独访问数据库(直接登录某数据库),需要权限访问的情况,用户名密码并非超级管理员,而是该库system.user表中的用户;
不单独访问(先进入admin库,再转到其他库,则使用超级管理员足矣)
四 基本语法 增删改查
database methods:
db.createUser(username,password);
db.auth(username,password);
db.cloneDataBase(fromhost); 从目标服务器可控一个数据库
db.copyDatabase(fromdb,todb,fromhost) 复制数据库 可以改名字``````这部分用到较少,主要是第二部分。
collection methods:
db.collectionName.find({"id":10}).skip(3).limit(3).sort({"age":-1}).count();
db.collectionName.findOne(...);
db.collectionName.remove();
db.collectionName.insert();
db.collectionName.update();
db.collectionName.getDB();返回名字
db.collectionName.getIndexes();索引信息
db.collectionName.group({key,reduce,initial,[keyf,cond,finalize]})
key:分组元素;reduce:自定义function方法对组内数据进行处理;initial:初始化结果集;keyf:可以对key进行处理并代替key;cond:先用cond过滤再分组;finalize:function方法对上面的结果再进行处理。
db.collectionName.renameCollection(newName);..........................
1)增
db.collectionName.insert({name:"wangzhanting",age:[15,25,35,45,55]});
db.collectionName.save({name:"wangzhanting",age:[15,25,35,45,55]});
两者用法类似,mongodb的save和insert函数都可以向collection里插入数据,但两者是有两个区别:
1.使用里,如果原来的对象不存在,那他们都可以向collection里插入数据,如果已经存在,save会调用update更新里面的记录,(而insert则会忽略操作,也就是不能插入)。 2.insert可以一次性插入一个列表,而不用遍历,效率高, save则需要遍历列表,一个个插入。2)删
db.collectionName.remove(DELETION_CRITERIA);删除符合条件的文档
db.collectionName.remove(DELETION_CRITERIA,1); 只删除第一个符合条件的文档
db.collectionName.remove(); 删除这个集合
db.dropDatabase(); 删除这个集合
3)改
save方法也有更新的作用。
db.collectionName.update({'title':'MongoDB Overview'},{$set:{'title':'New MongoDB Tutorial'}},1,1)
1 需要更新的条件 2 更新的内容的对象 3 如果没有符合条件的记录,是否新增,1 就新增,默认为0 4 如有有多个符合条件的记录,是否全部更新
使用到了$语法,下面做详细介绍
4)查
db.collectionName.find({"id":10},{"age":1}).skip(3).limit(3).sort({"age":-1}).count();
find后是查询条件,投影(显示哪几个属性),skip指忽略前几条;limit指只查询前几条;sort指按某字段排序;count计数。
$语法:
db.collection.find({x:{$gt:10,$lt:30}});
db.collection.find({x:{$gt:new Date("2012/01/01")}}); $lt 小于 $lte 小于等于 $gt 大于 $gte 大于等于 $ne 不等于
db.collection.find({x:{$in:[0,1,2]}});
db.collection.find({x:{$nin:[0,1,2]}}); $in 包含 $nin 不包含
db.collection.find({$or:[{age:10},{name:"aaa"}]})
db.collection.find({age:{$all:[1,2,3]}}) $all 匹配所有
db.collection.find(name:{$exists:false}) 查找属性不存在的文档
db.collection.find(name:null); 可以查到没有name属性或值为null的文档
db.collection.find(name:{$in:[null]},$exists:true) 可能存在一种情况,name存在但是null,这条语句可以查到
db.collection.find({age:{$mod:[5,1]}}) 取模,除5余1的文档
db.collection.find({age:{$not:{$mod:[5,1]}}})
db.collection.find({name:}) 正则表达式,这部分稍后
db.collection.find({num:{$size:2}}) 筛选数组大小
db.collection.find({num:{$slice:x}}) 返回数组的一个子集,x为正,则是前x个,x为负,则是后x个;x:[1,1],第一个参数是偏移量(不从第一个开始),第二个是选几个
$where 使用到了javascript,暂不详解
db.collection.update({age:10},{$set:{name:""}}) 局部更新
db.collection.update({age:10},{$unset:{name:1}}) 局部删除
db.collection.update({age:10},{$inc:{age:1}}) 加1
db.collection.update({age:10},{$push:{score:10}}) 向数组内添加记录
·········诸多方法不能穷举,可以参照官网https://docs.mongodb.org/manual/reference/operator/update/push/#up._S_push d