您的位置:首页 > 数据库 > Mongodb

MongoDB基本使用

2015-10-13 20:09 405 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: