数据库的操作:
创建数据库:
use 库名
查看系统数据库
show dbs
系统数据库有:admin:存储用户信息
local: 存储本地数据
config:存储分片信息
删除数据库: db.dropDatabase()
创建集合 : db.createCollection(‘collection_name’)
db.collecion_name.insert({...})
删除集合 : db.collection_name.drop()
集合重命名: db.collection_name.renameCollection("new_name")
查看集合: show collections
show tables
db : mongodb的全局量,代表当前正在使用的数据库
对集合的操作:
find(query,field)
功能 : 查找文档
参数 : query 查找条件,相当于where子句
field 查找的域
返回值 : 查找到的所有文档
find 的
query : 以键值对方式传递参数,如果是空{}表示查找所 有内容
e.g. 查找所有性别为w的文档
db.class0.find({sex:'w'})
field : 以键值对的方式给出要查找(不查找)的域
以域名为键,以0,1为值分别表示不查找和查找
* 如果某一个或多个域设置为0 表示这些域不查找,其他域均查找
* 如果某一个或多个域设置为1 表示这些域查找,其他域均不查找
* _id 除非设置为0 否则均会查找
* 除_id域其他域不能有的设置1有的设置0
e.g. 查找结果只有name域
db.class0.find({sex:'w'},{_id:0,name:1})
findOne(query,field)
功能 : 查找第一条符合条件的文档
参数 : 同find
返回值: 返回查找到的文档
e.g. 查找集合中性别为女的第一个文档
db.class0.findOne({sex:'w'},{_id:0,name:1})
query更多的筛选用法
操作符 : 使用$符号注明的一个特殊字符串,表达一定的 含义,比如 $lt 表示小于
参数解释
query更多的筛选用法
操作符 : 使用$符号注明的一个特殊字符串,表达一定的 含义,比如 $lt 表示小于
比较操作符
$eq 等于 ==
e.g. 查找年龄等于18
db.class0.find({age:{$eq:18}},{_id:0})
==》db.class0.find({age:18},{_id:0})
$lt 小于 <
e.g. 查找年龄小于18的
db.class0.find({age:{$lt:18}},{_id:0})
db.class0.find({name:{$lt:"John"}},{_id:0})
* 在mongodb中字符串可以比较大小
$lte 小于等于 <=
e.g. 年龄小于等于18
db.class0.find({age:{$lte:18}},{_id:0})
$gt 大于 >
e.g. 查找年龄大于16 且 小于19
db.class0.find({age:{$gt:16,$lt:19}},{_id:0})
* 在mongodb中所有的{} [] 中都可以写多个条件。但根据参数的不同表达的意思不一样
$gte 大于等于 >=
e.g. 大于等于19
db.class0.find({age:{$gte:19}},{_id:0})
$ne 不等于 !=
e.g. 性别不等于‘m’的
db.class0.find({sex:{$ne:'m'}},{_id:0})
* 使用ne查找也会找到该域不存在的文档
$in 包含
e.g. 找到年龄为 [10,20,30]
db.class0.find({age:{$in:[10,20,30]}},{_id:0})
$nin 不包含
e.g. 找到年龄不是 17 18 19 的
db.class0.find({age:{$nin:[17,18,19]}},{_id:0})
逻辑操作符
$and
1. 在 query 如果写多个条件默认即为 and 关系
e.g.
db.class0.find({age:{$lt:18},sex:'m'},{_id:0})
2. 逻辑与 $and
e.g. 年龄小于18并且 性别为男
db.class0.find({$and:[{age:{$lt:18}},{sex:'m'}]},{_id:0})
$or 逻辑或
e.g. 年龄小于16或者年龄大于18
db.class0.find({$or:[{age:{$lte:16}},{age:{$gt:18}}]},{_id:0})
$not 逻辑非
e.g. 查找年龄不小于18岁的
db.class0.find({age:{$not:{$lt:18}}},{_id:0})
$nor not (a or b) ===> (not a) and (not b)
e.g. 性别不是m且年龄不小于18
db.class0.find({$nor:[{sex:'m'},{age:{$lt:18}}]},{_id:0})
逻辑条件混合
(年龄大于17 并且 为男生) 或者 姓名叫 Abby
db.class0.find({$or:[{age:{$gt:17},sex:'m'},{name:'Abby'}]},{_id:0})
(年龄不大于18 或者为 女性) 并且 姓名 大于Lucy
e.g.
db.class0.find({$or:[{age:{$not:{$gt:18}}},{sex:'w'}],name:{$gt:'Lucy'}},{_id:0})
query更多的筛选用法
insert()
db.collection.insert()
功能 : 插入一个文档
参数 : 要插入的文档
插入单个文档
e.g.
db.class0.insert({'name':'Lucy',"age":18,"sex":'w'})
db.class0.insert({_id:1,name:'Jame',age:16,sex:'m'})
* 插入操作中键可以不加引号
* 查看插入结果 db.class0.find()
* _id 值可以自己插入,但是不能重复
插入多条文档
插入多条文档时,参数用中括号里面放入多个文档
e.g.
db.class0.insert([{name:"Alex",age:19,sex:'m'},{name:'Abby',age:18,sex:'w'}])
其他插入方法
insertOne() 插入一条文档
db.class0.insertOne({name:"Levi",age:20,sex:'m'})
insertMany() 插入多条文档
db.class0.insertMany([{name:"John",age:16,sex:'m'},{name:"Lenzer",age:17,sex:'m'}])
insert 插入文档
save()
db.collection.save()
如果正常插入与insert用法相同
e.g.
db.class0.save({name:'Allen',age:19,sex:'m'})
db.class0.save([{name:"Sunny",age:17,sex:'w'},{name:'Alice',age:16,sex:'w'}])
如果插入数据是有_id域,且_id域值存在时则会修改原有文档,如果该值不存在则正常插入
db.class0.save({_id:2,name:'Mary',age:20,sex:'w'})
获取集合对象方法
db.class0 ===> db.getCollection('class0')
e.g.
db.getCollection("class0").find()
save插入文档
update()
remove()
索引操作:
对文档中数组的操作:
数组修改器
$push 向数组中添加一项
e.g. 给小红 score数组中添加一项91
db.class1.update({name:'小红'},{$push:{score:91}})
$pushAll 向数组中添加多项
e.g.
db.class1.update({name:'小乔'},{$pushAll:{score:[94,10]}})
$pull 从数组中删除一项
e.g. 从数组中删除一项
db.class1.update({name:'小红'},{$pull:{score:78}})
$pullAll 从数组中删除多项
e.g.
db.class1.update({name:'小乔'},{$pullAll:{score:[92,10]}})
$each 对多个值逐个进行操作
e.g. 分别插入99 10
db.class1.update({name:'小乔'},{$push:{score:{$each:[99,10]}}})
$position 指定插入位置
e.g. 将67 插入到数组1号位置
db.class1.update({name:'小明'},{$push:{score:{$each:[67],$position:1}}})
$sort 数组排序
e.g. 将说有score域的数组降序排序
db.class1.update({},{$push:{score:{$each:[],$sort:-1}}},false,true)
$pop 弹出一项 1表示弹出最后一项 -1弹出第一项
e.g. 删除小明score中第一项
db.class1.update({name:'小明'},{$pop:{score:-1}})
$addToSet 向数组中添加一项 但是不能添加重复的内容
e.g. 如果数组中没有81 则添加81
db.class1.update({name:'小刚'},{$addToSet:{score:81}})