MongoDB的基本语法
使用用户名和密码连接登录到默认数据库
1、使用默认的服务器和账号登录
mongo
2、设置管理员
use admin
db.createUser({user: "admin",pwd: "password",roles: [ { role: "root", db: "admin" } ]});
3、使用自定义的账号密码登录其他的服务器
mongo --port 27017 -u admin -p password --authenticationDatabase admin
4、查看所有数据库
//查看所有的库
show dbs
有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库,别乱动。
•admin: 从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
•local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
•config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。
5、创建数据库
//创建、切换库
use dbname
//如果数据库不存在,则创建数据库,否则切换到指定数据库。
//在 MongoDB 中,集合只有在内容插入后才会创建! 就是说,创建集合(数据表)后要再插入一个文档(记录),集合才会真正创建。
//eg:
use myschool;创建或切换myschool
6、查看当前的数据库
db
//通过 db 来查看当前使用的数据库
7、删除数据库
//删除库 db-->this
db.dropDatabase()
//说明:db相当于Java中的this,就指代当前的Database;可以理解为java中的方法调用
8、创建集合
db.createCollection(“集合名”)
//eg
db.createCollection("teacher")
db.createCollection("student")
db.createCollection("imp")
9、查看集合
//查看库中的集合(两种都可以)
show collections
show tables
//注:
只有库中有数据,库才能被查到,如果没有数据,是看不到库的。
10、删除集合
//删除集合
db.集合名.drop()
11、MongoDB数据类型
shell默认使用64位浮点型数值。 (“x”:3.14)或(“x”:3}。
对于整型值,可以使用NumberInt(4 字节符号整数) 或NumberLong(8字节符号整数), {“x”:NumberInt(“3"”) }{“x”:NumberLong(“3"”)}
12、插入数据
插入的数据被称为文档,文档的数据结构和JSON基本一样。所有存储在集合中的数据都是BSON格式,BSON是一种类似于JSON的二进制形式的存储格式,是Binary JSON的简称。
db.集合名.insert(document)
eg:
db.student.insert({'name':'zhangsan','age':18})
db.student.insert({'name':'lisi','car':'沃尔沃'})
db.student.insert({'sex':'男','gf':{'name':'wangwu','age':80}})
db.student.insert({'name':'zhaoliu','dogs':['二哈','金毛','谢逊','拉布拉多']})
db.student.insert({'ren':[{'nan':'男人','nv':'女人'},{'yel':'黄种人','bl':'黑种人','wi':'白种人'}]})
13、修改数据
db.集合名。update({查询条件},{¥set:{更新内容}},
{
upsert:<boolean>,
multi:<boolean>,
}
)
注:
upsert:默认为false,如果查询不到数据,则把新输入插入到集合中
multi:默认为false,默认只改一条,true,更改多条
eg:
//修改
db.student.update({'name':'zhangsan'},{$set:{'age':20}})
//upsert设置为true;如果匹配到条件则进行修改,匹配不到则进行添加
db.student.update({'name':'zhangsansan'},{$set:{'age':21}},{upsert:true})
//multi设置为true;对所有符合条件的都进行修改,再次执行将不再进行修改以节省io所造成的资源浪费
db.student.update({'name':'zhangsan'},{$set:{'age':100}},{multi:true})
如果想实现在原有的基础上进行递增1可以使用$inc运算,好处就是减少IO操作,从而节省资源。
如果是正数就是增长,如果是负数就是减少
db.集合名.update({查询条件},{$inc:{字段名:NumerInt(1)}})
eg:
db.student.update({'name':'zhangsan'},{$inc:{'age':10}})
14、删除文档
db.集合名称.remove(
<query>,
{
justOne: <boolean>
}
)
eg:
//删除文档
//justOne就只删除遇到的第一条文档
db.student.remove({'name':'zhangsan'},{justOne:true})
//不加justOne就删除所有匹配到的文档
db.student.remove({'name':'zhangsan'})
//不写条件就把集合中的文档全删除
db.student.remove({})
15、查询文档
db.collection.find()
find()以非结构化的方式来显示所有的文档
eg:
//全查询
db.student.find()
pretty()方法以格式化的方式显示所有文档,linux下有用。
db.col.find().pretty()
条件查询
操作 | 格式 | 范例 | RDBMS中的类似语句 |
---|---|---|---|
等于 | {:} | db.col.find({“by”:“张三丰”}).pretty() | where by =‘张三丰’ |
小于 | {:{$lt:}} | db.col.find({“likes”:{“likes”:{$lt:50}}).pretty() | where likes < 50 |
小于等于 | {:{$lte:}} | db.col.find({“likes”:{“likes”:{$lte:50}}).pretty() | where likes <= 50 |
大于 | {:{$gt:}} | db.col.find({“likes”:{“likes”:{$gt:50}}).pretty() | where likes > 50 |
大于等于 | {:{$gte:}} | db.col.find({“likes”:{“likes”:{$gte:50}}).pretty() | where likes >= 50 |
不等于 | {:{$ne:}} | db.col.find({“likes”:{“likes”:{$ne:50}}).pretty() | where likes != 50 |
eg:
//条件查询
db.student.find({'age':8})
db.student.find({'age':{$lt:50}})
db.student.find({'age':{$gt:50}})
db.student.find({'age':{$lte:50}})
db.student.find({'age':{$gte:50}})
db.student.find({'age':{$ne:50}})
//查询没有性别的人
//exists设置为false就是查询该字段不存在
db.student.find({'sex':{$exists:false}})
16、条件查询
1、and查询
MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开, 即常规 SQL 的 AND 条件。
db.col.find({key1:value1, key2:value2})
注:类似于 WHERE 语句:WHERE key1=‘value1’ AND key2=‘value2'
eg:
//多条件and查询
db.student.find({'age':{$lt:40},'sex':false})
2、or条件查询
db.col.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
)
eg:
//多条件or查询
db.student.find({
$or:[
{'age':{$lt:30}},
{'sex':true}
]
})
3、and和or的联合使用
db.col.find({“key1": {$gt:value1}, $or: [{“key2": “value2"},{“key3": “value3"}]})
//类似常规 SQL 语句为: ‘where key1>value1 AND (key2 = value2 OR key3 = value3)
col"集合中 “key" 大于100,小于 200 的数据
db.col.find({“key” : {$lt :200, $gt : 100}})
//相当于RDBMS:Select * from col where key>100 AND key<200;
eg:
//年龄必须小于50岁,如果姓名为张三性别可以为false,否则必须为true
db.student.find({'age':{$lte:50},$or:[{'sex':false},{'name':'张三'}]})
//范围查找年龄大于20小于50
db.student.find({'age':{$gt:20,$lt:50}})
4、模糊查询
//查询 name 包含“小"字的文档:
db.col.find({“name”:/小/})
//查询 name 字段以“小"字开头的文档:
db.col.find({“name”:/^小/})
//查询 name字段以“小"字结尾的文档:
db.col.find({“name”:/小$/})
eg:
//包含张的姓名
db.student.find({'name':/张/})
//张开头的姓名
db.student.find({'name':/^张/})
//张结尾的姓名
db.student.find({'name':/张$/})
17、分页查询
//显示从头开始的多少行数据
db.col.find().limit(number)
//需要在MongoDB中读取指定数量的数据记录,可以使用MongoDB的Limit方法,limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数。
eg:
//显示前条数据
db.student.find().limit(3)
//显示跳过多少行数据显示多少行数据
db.col.find().limit(number).skip(number)
//除了可以使用limit()方法来读取指定数量的数据外,还可以使用skip()方法来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数。
//跳过前四个显示三个
db.student.find().limit(3).skip(4);
18、统计个数
//统计集合中一共有多少文档
db.col.count()
eg:
//统计次数
db.student.count()
//统计条件查询的结果
db.col.count({key:value})
eg:
//统计条件查询次数
db.student.count({'name':'张三'})
19、排序
db.col.find().sort()
//在 MongoDB 中使用 sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。
eg:
db.student.find().sort({'age':1})
20、索引
1、查看索引
db.collection.getIndexes()
2、创建索引
db.collection.createIndex(keys,option)
eg:
//创佳索引
db.student.createIndex({'age':1})
3、删除索引
db.collection.dropIndex(index)
eg:
//删除索引
db.student.dropIndex({'age':1})