MongoDB基本使用

MongoDB基本使用


启动MongoDB服务(window下)
路径切换到MongoDB的BIN目录下
mongod --dbpath "D:\mongodb\data\db" --logpath "D:\mongodb\data\log\MongoDB.log"




链接mongo./bin/mongo 127.0.0.1:27017


成功启动MongoDB后,再打开一个命令行窗口输入mongo,就可以进行数据库的一些操作。


输入help可以看到基本操作命令:
show dbs:显示数据库列表 
show collections:显示当前数据库中的集合(类似关系数据库中的表) 
show users:显示用户


use <db name>:切换当前数据库,这和MS-SQL里面的意思一样 
db.help():显示数据库操作命令,里面有很多的命令 
db.foo.help():显示集合操作命令,同样有很多的命令,foo指的是当前数据库下,一个叫foo的集合,并非真正意义上的命令 
db.foo.find():对于当前数据库中的foo集合进行数据查找(由于没有条件,会列出所有数据) 
db.foo.find( { a : 1 } ):对于当前数据库中的foo集合进行查找,条件是数据中有一个属性叫a,且a的值为1


MongoDB没有创建数据库的命令,但有类似的命令。


如:如果你想创建一个“myTest”的数据库,先运行use myTest命令,之后就做一些操作(如:db.createCollection('user')),这样就可以创建一个名叫“myTest”的数据库。


数据库常用命令


1、Help查看命令提示


 help


  db.help();


  db.yourColl.help();


  db.youColl.find().help();


  rs.help();


2、切换/创建数据库


 use yourDB;  当创建一个集合(table)的时候会自动创建当前数据库


3、查询所有数据库


 show dbs();


4、删除当前使用数据库


 db.dropDatabase();


5、从指定主机上克隆数据库


 db.cloneDatabase(“127.0.0.1”); 将指定机器上的数据库的数据克隆到当前数据库


6、从指定的机器上复制指定数据库数据到某个数据库


 db.copyDatabase("mydb", "temp", "127.0.0.1");将本机的mydb的数据复制到temp数据库中


7、修复当前数据库


 db.repairDatabase();


8、查看当前使用的数据库


 db.getName();


 db; db和getName方法是一样的效果,都可以查询当前使用的数据库


9、显示当前db状态


 db.stats();


10、当前db版本


 db.version();


11、查看当前db的链接机器地址


 db.getMongo();


Collection聚集集合


1、创建一个聚集集合(table)


 db.createCollection(“collName”, {size: 20, capped: 5, max: 100});


2、得到指定名称的聚集集合(table)


 db.getCollection("account");


3、得到当前db的所有聚集集合


 db.getCollectionNames();


4、显示当前db所有聚集索引的状态


 db.printCollectionStats();






增删改查(要注意的就是文档是一个json的扩展(Bson)形式。)
一.写入
db.users_collection.insert({x:1}) 
二.查询
//查询集合中全部文档
db.users_collection.find() 
db.users_collection.find({m:{$exists:true}}) //查找存在m字段的记录
//带条件查询 返回符合条件的数据 
db.users_collection.find({x:1}) 
//使用JS语法批量插入数据
for(i=0;i<100;i++){db.users_collection.find({x:i}) }
//统计总数
db.user_collection.findOne()//查询一条数据
db.user_collection.find().count() //统计集合中所有数据总数 = db.user_collection.count()
db.user_collection.find({x:1}).count()//带条件统计 满足x:1的总数
//限制查询取出数量
db.user_collection.find().skip(10).limit(5).sort({x:-1})//skip跳过多少,limit取出数量,sort排序1是升序,-1是降序
三.更新
//update  如果有多件数据满足只更新第一条
db.user_collection.update({x:1},{x:-1})//更新条件x=1的数据为x=-1 ,同时数据字段只有x=1如果有其他字段会清空
db.user_collection.update({x:1},{$set:{x:-1}})//更新条件x=1的数据为x=-1 ,如果有其他字段不会被清空
db.user_collection.update({x:1},{$set:{x:-1},true})//当第三个参数指定为true,更新一条不存在的数据时候会自动插入
//update 第四个参数设置为true 则是批量更新全部满足条件的数据,但是必须用修改器例如$set
db.user_collection.update({x:1},{$set:{x:-1},false,true})//第三个参数设置true如果没有满足条件记录会自己插入一条新数据并马上更改为x=-1
四.删除
为防止误删,不允许不带条件执行remove删除命令
db.user_collection.remove({c:100})//删除所有c=100的数据
db.user_collection.drop()//删除users_collection整张数据表(集合)


索引的使用
一.查看索引的使用情况
db.user_collection.getIndexes()
二.创建索引
db.user_collection.ensureIndex({x:1})//这里的1不代表值,1表示正向排序,-1表示反向排序,一般关系不明显
db.user_collection.ensureIndex({x:1},{name:demo_1})//指定索引的名称 demo_1
db.user_collection.ensureIndex({x:1},{name:demo_1,unique:true/false})//指定索引的名称 demo_1 是否唯一索引
db.user_collection.ensureIndex({x:1},{sparse:true/false})//指定索引是否稀疏性(选择是稀疏性:不存在的字段不建立索引,好处节省磁盘空间,但是使用$exists查询,则不使用索引查询,若使用hint强制使用索引则查询不出结果),默认不是稀疏性 
db.user_collection.ensureIndex({x:1},{expireAfterSeconds:10})//失效时间 建立过期索引时用
db.user_collection.dropIndex('demo_1')//删除名字demo_1的索引
三.索引类型
1._id索引
//默认建立 自动生成唯一 类似主键
2.单键索引
//最普通的索引  值为单一的值如数字,字符串,日期
db.user_collection.ensureIndex({x:1})//这里的1不代表值,1表示正向排序,-1表示反向排序
3.多键索引
//区别单键索引  值为多个记录例如数组
4.复合索引
db.user_collection.ensureIndex({x:1,y:1})
5.过期索引
//一段时间后索引会失效,索引失效后对应的数据也会删除,适合存放的数据是登陆信息,登陆日志等等
a.存放在过期索引字段的值必须是ISOdate或者ISOdate数组,不能是时间戳,否则索引失效不能自动删除 例如使用{time:new Date()}当前时间作为值
b.如果指定了ISODate数组,则按照最小的时间进行删除,以数组最小的元素作为参考删除时间点
c.过期索引不能是符合索引
d.删除时间不是一个精确的时间,删除过程是后台程序每60秒跑一次,而且删除数据也需要时间,所以存在误差
6.全文索引
a.创建
//对字符串或字符串数组创建全文可搜索的索引
db.user_collection.ensureIndex({x:'text'})//当value不再是1或者-1,而是字符串text时就是建立全文索引
db.user_collection.ensureIndex({x:'text',y:'text'})//x和y都建立全文索引
db.user_collection.ensureIndex({'$**':'text'})//对user_collection这个集合所有字段都建立全文索引
b.查询
db.user_collection.find({'$text':{$search:'aa'}})//查询建立了全文索引的字段中含有aa的数据
db.user_collection.find({'$text':{$search:'aa bb cc'}})//或的关系 查询建立了全文索引的字段中含有aa或bb或cc的数据
db.user_collection.find({'$text':{$search:'aa bb -cc'}})//排除含有cc 但是包含aa或者bb的数据
db.user_collection.find({'$text':{$search:'\"aa\" \"bb\" \"cc\"'}})增加引号表示且的关系 表示含有aa且含有bb且含有cc的数据,但是要转义引号所以加\
c.相识度查询
db.user_collection.find({'$text':{$search:'aa bb cc'}},{score:{$meta:'textScore'}})//score返回字段别名,{$meta:'textScore'}固定写法
db.user_collection.find({'$text':{$search:'aa bb cc'}},{score:{$meta:'textScore'}}).sort(score:{$meta:'textScore'}})//根据相似值得分排序
d.全文索引使用限制
每次查询只能指定一个$text
$text查询不能出现在$nor查询中//$nor:排除
查询中包含$text,hint不再起作用 //hint强制使用索引db.collection.find({user:u, foo:d}).hint({user:1});
暂时不支持中文
7.地理位置索引
子分类:
2d索引,用于储存和查找平面上的点
db.user_collection.ensureIndex({w:'2d'})
位置表示方式:经纬度[经度,纬度]
取值范围:经度[-180,180]纬度[-90,90]
$near查询  查询最近的某个点
db.user_collection.find({w:{$near:[1,1]}})//默认查询距离1,1最近的100个点
db.user_collection.find({w:{$near:[1,1],$maxDistance:10}})//增加条件限制不超过1,1 10个单位
$geoWithin查询, 查询某个形状内的点
形状表示:
$box:矩形,使用
{$box:[[<x1,y1>],[<x2,y2>]]}//包含2个坐标,第一表示矩形左边界,第二个表示矩形右边界
db.user_collection.find({w:{$geoWithin:{$box:[[1,2],[3,4]]}}})
$center:圆形,使用
{$center:[[<x1,y1>],r]}//第一个数组表示圆心位置,r表示半径
db.user_collection.find({w:{$geoWithin:{$center:[[5,6],2]}}})
$polygon:多边形,使用
{$polygon:[[<x1,y1>],[<x2,y2>],[<x3,y3>]]}//数组不限制,每个数组表示多边形的顶点,3个数组是三边形
db.user_collection.find({w:{$geoWithin:{$polygon:[[1,1],[1,3],[3,4],[5,6]]}}})


geoNear查询:
geoNear使用runCommand命令进行使用,
db.runCommand({
geoNear:'user_collection',    //集合的名字
near:[1,2], //某点坐标
minDistance:10         //对2d索引无效,对2dsphere有效
maxDistance:20 //最大距离
num:2 //返回限制的数量
})






2dsphere索引,用于储存和查找球面上的点
db.user_collection.ensureIndex({w:'2dsphere'})
位置表示方式:
GeoJSON:描述一个点,一条直线,一个形状
格式:
{type:'point',coordinates:[1,2]}




四.索引分析
1.mongostat    mongostat -h 127.0.0.1:27017
2.db.getProfillingStatus();


五.创建用户
db.createUser({user:'xiaoming',pwd:'123',role:[{role:'userAdmin',db:'test'}]})
//用户名xiaoming 密码123  在test数据库上的角色是userAdmin,角色内建有:read,readWrite,dbAdmin,dbOwner,userAdmin
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值