MongoDB 增删改差

show dbs;

use jack_seller;

db.test.find().count();

db.test.insert([
    {name:'zhang',age:12,sex:'w'},
     {name:'wang',age:10,sex:'m'},
     {name:'li',age:19,sex:'w'},
     {name:'gao',age:8,sex:'w'},
     {name:'hu',age:20,sex:'m'}
     ])


设置field值,1表示查询结果显示该field,0表示不显示
例如: 不显示 _id  就在末尾设置  {_id:0} 
db.test.find({age:12},{_id:0})
db.test.find({age:12},{sex:0,_id:0})





$lt      小于
$lte     小于等于
$gt      大于
$gte     大于等于
$eq      等于     
$ne      不等于
db.test.find({age:{$lt:12}})


$in      是否包含
$nin     是否不包含
db.test.find({age:{$in:[8]}})
db.test.find({age:{$in:[10,11,8]}})

$and 逻辑与
db.test.find({$and:[{age:12},{sex:"m"}]})

$or  逻辑或
db.test.find({$or:[{age:12},{sex:"m"}]})

$not 逻辑非 (不等于)
db.test.find({name:{$not:{$eq:'zhang'}}})


$nor 既不也不
db.test.find({$nor:[{name:'zhang'},{age:11}]},{_id:0})


条件混合查找
// name != 张 and ( age=12 or age= 13)
db.test.find({name:{$ne:'zhang'},$or:[{age:12},{age:13}]})

// age > 13  or (name = 'zhang' and sex = 'm') 不显示 _id
db.test.find({$or:[{age:{$gt:13}},{name:'zhang',sex:'m'}]},{_id:0})



db.test.insert([
    {name:'zhang',age:12,sex:'m',hobby:['song','run'],score:[10,50,90]},
     {name:'wang',age:10,sex:'m',hobby:['run'],score:[10,60,90]},
     {name:'li',age:19,sex:'w',hobby:['song'],score:[10,150,90]},
     {name:'gao',age:8,sex:'w',hobby:['song','run'],score:[10,50,70]},
     {name:'hu',age:20,sex:'m',hobby:['song','run','comp'],score:[10,70,90]}
     ])

//查询 hobby 中包含 song 的 文档
db.test.find({hobby:'song'})

//查找集合中hobby数组里同时包含‘song’和‘run’的文档:

db.test.find({hobby:{$all:['song','run']}},{_id:0})



查找一个数组中是否包含一个区间
db.test.find({score:{$elemMatch:{$gt:80,$lte:91}}},{_id:0})


查找一个数组中包含值得个数
db.test.find({hobby:{$size:1}},{_id:0})


查找存在score字段的记录
db.test.find({score:{$exists:true}})
查找不存在score字段的记录
db.test.find({score:{$exists:false}})

查找age 被2除余数是1的记录
db.test.find({age:{$mod:[2,1]}},{_id:0})

查找某个域指定数据类型的记录
db.test.find({score:{$type:1}},{_id:0})

*在mongo中每种数据类型都匹配了一个整数值
Double     1   String   2   Object  3  Array   4    Binary data 5
Object id  7   Boolean  8   Date    9  Null   10    Regular expression  11
Symbol     14    JavaScript code    13  JavaScript code with scope  15
32-bit integer  16   Timestamp  17    64-bit integer    18
Min key 255   Max key   127


//获取 name 的所有参 去重
db.test.distinct('name') 


将find结果格式化显示
db.test.find().pretty()

//分页
显示find结果的前num条记录
db.test.find().limit(2)

跳过前num条记录,显示2条结果
db.test.find().skip(2).limit(2)

统计匹配到的记录的条数
db.test.find().count()

sort({})
按照指定字段进行排序
{age : 1}  按照age进行升序排列
{age : -1}  按照age进行降序排列
当有多个排序项时为复合排序   find(条件,显示字段).sort(排序条件)
db.test.find({},{_id:0}).sort({age:-1})
db.test.find({},{_id:0}).sort({age:-1,name:1})



删除所有name为‘zhang’的文档
db.test.remove({name:'zhang'})


删除第一条age为10的文档
db.test.remove({age:10},1)


删除全部文档
db.test.remove({})


更新:

db.test.insert([
    {name:'zhang',sex:'m',hobby:['song','run'],score:[10,50,90]},
     {name:'wang',sex:'m',hobby:['run'],score:[10,60,90]},
     {name:'li',sex:'w',hobby:['song'],score:[10,150,90]},
     {name:'gao',sex:'w',hobby:['song','run'],score:[10,50,70]},
     {name:'hu',sex:'m',hobby:['song','run','comp'],score:[10,70,90]}
     ])

db.test.find()

// db.test.update(设置条件,{$set:{修改值},不存在是否插入,是否修改全部})


将姓名为wangwu的文档age改为20,如果不存在age域则自动添加
db.test.update({name:'wang'},{$set:{age:20}})
//为所有文档条件 age:20
db.test.update({},{$set:{age:20}},false,true)


删除test集合中 name:'wang' 的第一条文档的age域(age后面0,1均会删除该域)
db.test.update({name:'wang'},{$unset:{age:1}})

$rename  修改域名
将文档中第一个ag域名字改为age
db.test.update({},{$rename:{'age':'ages'}},false,true)
将文档中所有域名字改为age
db.test.update({},{$rename:{'age':'ages'}})


修改所有name为gao的age为25  第一个 没有是否插入,  第二true
db.test.update({name:'gao'},{$set:{age:25}},false,true)

如果name为haoren的文档存在则修改其age为27,如果不存在则插入{name:'haoren',age:27} 
db.test.update({name:'haoren'},{$set:{age:27}},true,false)


修改age为21,sex为‘w’
db.test.update({name:'wangwu'},{$set:{age:21,sex:'w'}},true,false)


$inc 将某个域的值增加几(如果为负数则为减少)
db.test.update({name:'wangwu'},{$inc:{age:-2}})


$mul 将第一条数据的age乘以2
db.test.update({},{$mul:{age:2}},false,true)


将集合中所有age大于25的值修改为25
db.test.update({},{$min:{age:25}},false,true)


将集合中所有age小于22的值修改为22
db.test.update({},{$max:{age:22}},false,true)



数组修改器    两个Boolean值得          
db.test.update({},{$push:{course:'Python'}},是否插入,是否更新全部)
$push 向数组添加一个值
db.test.update({},{$push:{course:'Python'}})


$pushAll  向数组中添加多项
db.test.update({name:'huairen'},{$pushAll:{course:['python','mongodb']}})


$each 添加多项数据
db.test.update({name:'haoren'},{$push:{course:{$each:['python','java']}}})


$pull 从数组中删除一项
db.test.update({name:'haoren'},{$pull:{course:'java'}})


$pullAll  从数组中删除多项
db.test.update({name:'wangwu'},{$pullAll:{course:[123,'Python']}})


$pop 从数组两端弹出数据
删除数组中的最后一项(1)
db.test.update({name:'huairen'},{$pop:{course:1}})


删除数组中的第一项(-1)
db.test.update({name:'huairen'},{$pop:{course:-1}})


$addToSet 同 push 但是不能有重复
添加一项,但是如果原数组中已有此项则无法添加
db.test.update({},{$addToSet:{course:'html'}})


关于null


某一个键的值是null


查找publication域是null的文档
db.test.find({publication:null})


某一个文档不存在这个域


查找不存在publication_date域的文档
db.test.find({publication_date:null})


文档类型的数据


内部文档数据查找使用
* 按照键值进行匹配
db.test.find({book:{ "title" : "Python从入门到放弃", "price" : 88 }},{_id:0})


*使用外层键的名词引用内存文档键,查找对应的值
这时查找项必须加引号


db.test.find({'book.price':88},{_id:0})


db.test.update({book:{$exists:true}},{$set:{'book.price':60}})


练习:
文档机构同上次
创建一个数据库 名字为 grade 
数据库中创建集合集合名称为 class 
向集合中插入若干文档文档结构如下
{name:‘小红’,age:10,sex:‘w’,hobby:['a','b']}


1. 将该班中姓名为小红的学生年龄变为8岁,兴趣爱好变为跳舞画画
 {$set:{age:8,hobby:['dance','drawing']}}


2. 追加 小明的兴趣爱好,增加唱歌
 {$push:{hobby:'sing'}}


3.增加小王兴趣爱好,吹牛和打篮球
{$pushAll:{hobby:['chuiniu','basketball']}}


4.追加小李兴趣爱好,吹牛,唱歌,要保证和原有爱好不重复
{$addToSet:{hobby:{$each:['chuiniu','sing']}}}


5.给该班所有同学年级增加1岁
{$inc:{age:1},false,true}


6.删除小明同学的sex属性
{$unset:{sex:1}}

7.删除小明兴趣爱好中的第一项
{$pop:{hobby:-1}}


8.删除小红兴趣中的画画
{$pull:{hobby:'drawing'}}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值