查看有哪些数据库:show dbs
切换到test数据库:use test
查看test数据库中的集合:show collections
我们创建一个王者集合
1新增
db.wangzhe.insertOne(
... {
... _id: "fashiyijie",
... name: "diaochan",
... nanduValue: 70
... }
... )
如果使用存在的_id创建文档会怎么样呢
db.wangzhe.insertOne(
... {
... name: "zhugeliang",
... nanduValue: 50
... }
... )
创建多个文档
db.wangzhe.insertMany([
... {
... name: "zhenji",
... nanduValue: 20
... },
... {
... name: "wangzhaojun",
... nanduValue: 20
... }
... ])
如果我想加字段了,怎么办了,需要改动表结构吗?
db.wangzhe.insertOne(
... {
... type: "fashi",
... name: "daji",
... nanduValue: 10
... }
... )
文档中包含文档
db.wangzhe.insertOne(
... {
... type: ["fashi","cike"],
... name: "buzhihuowu",
... nanduValue: 10,
... mingwen: {"mengyan":10,"lunhui":5,"xinyan":5}
... }
... )
2查询
查询全部文档
db.wangzhe.find()
db.wangzhe.find().pretty()
匹配查询
db.wangzhe.find({name:"diaochan"})
db.wangzhe.find({name:"diaochan", nanduValue:100})
比较操作符 查询($eq $ne $gt $lt $in $nin)
读取dianchao的详情文档
db.wangzhe.find({name:{$eq:"diaochan"}})
读取不属于dianchao的信息文档
db.wangzhe.find({name:{$ne:"diaochan"}})
读取难度大于50的文档
db.wangzhe.find({nanduValue:{$gt:50}})
读取daji和zhenji的文档
db.wangzhe.find({name:{$in:["daji","zhenji"]}})
读取不是daji和zhenji的账户文档
db.wangzhe.find({name:{$nin:["daji","zhenji"]}})
逻辑运算符($not $and $or $nor)
读取难度不小于50的文档
db.wangzhe.find({nanduValue:{$not:{$lt:50}}})
读取nandu大于50并且用户姓名排在gongben之后的文档
db.wangzhe.find({nanduValue:{$gt:50},name:{$gt:"gongben"}})
读取nandu大于40并且小于80的文档
db.wangzhe.find({nanduValue:{$gt:40,$lt:80}})
读取属于daji或wangzhaojun的文档
db.wangzhe.find({$or:[{name:{$eq:"daji"}}, {name:{$eq:"wangzhaojun"}}]})
读取不属于daji和diaochan且nandu不小于40的文档
db.wangzhe.find({
$nor:[
... {name:"daji"},
... {name:"diaochan"},
... {nanduValue:{$lt:40}}
... ]
... })
字符操作符
读取包含类型字段的文档
db.wangzhe.find({"type":{$exists:true}})
db.wangzhe.find({"mingwen.xinyan":{$exists:true}})
读取文档主键是字符串的信息文档
db.wangzhe.find({ _id:{$type:"string"}})
读取文档主键是对象主键或是复合主键的文档
db.wangzhe.find({ _id:{$type:["objectId","object"]}})
关于数组的查询 type为fashi并且cike
db.wangzhe.find({type:{$all:["fashi","cike"]}})
运算操作符
读取姓名以d或z开头的文档
db.wangzhe.find({name:{$in:[/^d/,/^z/]}})
读取用户姓名包含LIE(不区分大小写)的文档
db.wangzhe.find({name:{$regex: /ZH/, $options:'i'}})
文档投影查询
db.wangzhe.find({},{_id:0,name:1,type:1})
$slice对type字段投影时,只返回type数组中第一个元素
db.wangzhe.find({ },{_id:0,name:1,type:{$slice:1}})
关联查询
3修改
更新文档命令语法
db.<collection>.update(<query>,<update>,<options>)
query定义更新操作时筛选文档的条件
update提供更新内容
options声明一些更新操作的参数
更新整篇文档
将zhugeliang的英雄难度更改为60
db.wangzhe.update({name:"zhugeliang"},{name:"zhuge",nanduValue:60})
在使用<update>替换整篇被更新文档时,只有第一篇符合query筛选条件的文档会被更新。
更新特定字段
更新daji的难度值和基本信息
db.wangzhe.update(
... {name:"daji"},
... {$set:
... {
... nanduValue:5,
... info:{
... createTime:new Date("2022-08-18T16:00:00Z"),
... picUrl:"这是一个图片地址"},
... }
... }
... )
更新buzhihuowu的联系电话。(使用下标,0表示type数组中第1 个元素)
db.wangzhe.update(
... {name:"buzhihuowu"},
... {$set:
... {
... "type.0":"zhanshi"
... }
... }
... )
添加buzhihuowu新的英雄属性
db.wangzhe.update(
... {name:"buzhihuowu"},
... {$set:
... {
... "type.2":"cike"
... }
... }
... )
删除字段
删除daji的文档类型和info
db.wangzhe.update(
... {name:"daji"},
... {$unset:
... {
... type:"",
... "info.picUrl":"",
... }
... }
... )
重命名字段
如果$rename命令要重命名的字段并不存在,则文档内容不会被改变。
db.wangzhe.update(
... {name:"zhuge"},
... {$rename:
... {
... "notExist":"name"
... }
... }
... )
如果新字段名已经存在,则原有这个字段会被覆盖
用yingxiong代替name,原来contact字段数组会被覆盖。
db.wangzhe.update(
... {name:"zhuge"},
... {$rename:
... {
... "name":"yingxiong"
... }
... }
... )
更新字段值
db.wangzhe.update(
... {name:"diaochan"},
... {$inc:
... {
... nanduValue:-0.5
... }
... }
... )
db.wangzhe.update( {name:"daji"}, {$mul: { nanduValue:0.5 } } )
如果被更新的字段不存在,会添加。
db.wangzhe.update(
... {name:"daji"},
... {$inc:
... {
... notyetExist:10
... }
... }
... )
数组更新操作符
$addToSet 向数组中增加元素
$pop 从数组中移除元素
$pull 从数组中有选择性的移除元素
$pullAll 从数组中有选择性的移除元素
$push 向数组中增添元素
向diaochan的信息文档中添加英雄属性
db.wangzhe.update(
... {name:"diaochan"},
... {$addToSet:{type:"cike"}}
... )
向karen账户文档中添加多个属性(做为内嵌数组插入)
db.wangzhe.update( {name:"diaochan"}, {$addToSet:{type:["fashi","daye"]}}
... )
删除type数组中内嵌数组[‘type1’,’type2’]中第1个元素
db.wangzhe.update(
... {name:"diaochan"},
... {$pop:{"type.1":-1}})
从diaochan的type中删去包含’ke’字母的元素
db.wangzhe.update(
... {name:"diaochan"},
... {$pull:{type:{$regex:/ke/}}}
... )
向数组字段中添加元素,类似$addToSet,但功能更强大。
db.wangzhe.update(
... {name:"diaochan"},
... {$push:{koujue:"二技能不能断"}}
... )
给集合加字段,更新多个文档
db.wangzhe.update(
... ... {},
... ... { $set:{
... ... zhuangbei:"xiezi"
... ... }
... },
... {multi:true}
... )
4删除
db.wangzhe.remove({Value:50})
如果只想删除满足筛选条件的第一篇文档,可以用justOne
删除一篇nandu小于50的文档
db.wangzhe.remove(
... {nanduValue:{$lt:50}},
... {justOne:true}
... )
删除所有文档
db.wangzhe.remove({})
删除集合
db.wangzhe.drop()