一.查询中常见的 (等于 大于 小于 大于等于 小于等于)
等于 : 在MongoDB中什么字段等于什么值其实就是 " : " 来搞定 比如 "name" : "路飞学城"
大于 : 在MongoDB中的 大于 > 号 我们用 : $gt 比如 : "score" : { $gt : 80 } 就是 得到 "score" 大于 80 的数据
小于 : 在MongoDB中的 小于 < 号 我们用 : $lt 比如 : "score" : { $lt : 80 } 就是 得到 "score" 小于 80 的数据
大于等于 : 在MongoDB中的 大于等于 >= 号 我们用 : $gte 比如 : "score" : { $gte : 80 } 就是 得到 "score" 大于等于 80 的数据
小于等于 : 在MongoDB中的 小于等于 <= 号 我们用 : $lte 比如 : "score" : { $lte : 80 } 就是 得到 "score" 小于等于 80 的数据
二.MongoDB的update修改器: $inc $set $unset $push $pull
在此前的update中,我们用过$set,对数据进行过更新,其实在update中还存在很多的$关键字,我们把update中的这些关键字叫做修改器
1.$inc : Python中的 变量 += 1 , 将查询到的结果 加上某一个值 然后保存
还是刚才Collection数据,我们来试一下$inc , 让不及格的 "路飞学城2" 变成 60 分
成功了 , {$inc:{"score":1}}的意思是,"score"的原有数值上面 +1,那我们再来实验一次,把60改为20,这怎么操作呢,其实可以理解为在 60 上加一个 -40
2.$set : 此前我们已经提到过 $set 的用法和特性(没有就自动添加一条)了
再做一个例子:把 "score" 为 100 分 的 "english_name" 赋值为 "LuffyCity"
再把 "score" 为 20 分的 "score" 赋值为 59 分
3.$unset : 用来删除Key(field)的
做一个小例子 : 刚才我们有一个新的"english_name" 这个field ,现在我们来删除它
4. $push : 它是用来对Array (list)数据类型进行 增加 新元素的,相当于我们大Python中 list.append() 方法
做一个小例子 :首先我们要先对原有数据增加一个Array类型的field:
使用update $set 的方法只能为Document中的第一条添加
使用updateMany $set 的方法 可以为所有满足条件的 Document 添加 "test_list" , 注意我这里的条件为空 " {} " 就算是为空,也要写上"{}" 记住记住记住
接下来我们就要队列表进行添加了: 将 "score" 为 100 的Document 中"test_list" 添加一个 6
$push 是在 Array(list) 的尾端加入一个新的元素 {$push : {"test_list" : 6}}
5.$pull : 有了$push 对Array类型进行增加,就一定有办法对其内部进行删减,$pull 就是指定删除Array中的某一个元素
做一个例子: 把我们刚才$push进去的 6 删除掉
问题来了,如果 Array 数据类型中 如果有 多个 6 怎么办呢?
全部删掉了...
得出了一个结论,只要满足条件,就会将Array中所有满足条件的数据全部清除掉
6. $pop : 指定删除Array中的第一个 或 最后一个 元素
做个小例子: 删除"score" 等于 100 分 test_list 的最后一个元素
怎么删除第一个呢?
{$pop:{"test_list" : -1}} -1 代表最前面, 1 代表最后边 (这和我们大Python正好相反)
三.MongoDB 之 "$" 的奇妙用法
在MongoDB中有一个非常神奇的符号 "$"
"$" 在 update 中 加上关键字 就 变成了 修改器
其实 "$" 字符 独立出现也是有意义的 , 我起名叫做代指符
首先看个例子: 还是这个Collection
现在把 "score": 100 的 test_list 里面的 2 改为 9
{$set :{"test_list.0" : 9}} 这样就是对应 Array 中的下标进行修改了 "test_list.下标"
问题来了 如果 是 一个很长很长很长的 Array 你要查找其中一个值,把这个值修改一下怎么整呢?
$ 字符 在语句中代表了什么呢? 下标,位置 表示2在text_list中的索引
解释一下: 首先我们查询一下db.Oldboy.findOne({"score":100,"test_list":3}) 返回 给我们满足条件的数据对吧
那么 如果 我们 使用 update的话, 满足条件的数据下标位置就会传递到 $ 字符中,在我们更新操作的时候就相当于对这个位置的元素进行操作
四.$的其他用法
查询$关键字:
$all #满足所有元素的数据
db.user.find({'age':{$all:[1,3]}})
$in #满足其中一个元素的数据
db.user.find({'age':{$in:[1,3]}})
$or #满足其中一个字段的数据
db.user.find({$or:[{name:"yinwangba"},{age:{$gt:70}}]})
limit(x):
只查询前x条数据
skip(x):
跳过前x条数据
sort({ id:-1 }):
根据id字段进行倒序排列:-1 正序排列:1
如果三个关键字同时出现,有优先级
1.sort 2.skip 3.limit
五:MongoDB之Array Object 的特殊操作
相比关系型数据库, Array [1,2,3,4,5] 和 Object { 'name':'DragonFire' } 是MongoDB 比较特殊的类型了
特殊在哪里呢?在他们的操作上又有什么需要注意的呢?
那我们先建立一条数据,包含 Array 和 Object 类型
db.Oldboy.insert({"name":"路飞学城-骑士计划","price":[19800,19500,19000,18800],"other":{"start":"2018年8月1日","start_time":"08:30","count":150}})
{ "_id" : ObjectId("5b17d01a49bf137b585df891"), "name" : "路飞学城-骑士计划", "price" : [ 19800, 19500, 19000, 18800 ], "other" : { "start" : "2018年8月1日", "start_time" : "08:30", "count" : 150 } }
一.Array
1.把price 中 19000 改为 19300
db.Oldboy.update({"name":"路飞学城-骑士计划"},{$set:{"price.2":19300}})
我们用了引用下标的方法更改了数值 , "price.2"代指的是 Array 中第3个元素
2. 混合用法
如果 price.1 中小于19800 则加 200
db.Oldboy.update({"name":"路飞学城-骑士计划","price.1":{$lt:19800}},{$inc:{"price.1":200}})
我们把 price 小于 19500 的 自动补上 200
db.Oldboy.updateMany({"name":"路飞学城-骑士计划","price":{$lt:19500}},{$inc:{"price.$":200}})
细心的同学已经发现了,只改了第一个,是的 $ 这个只储存一个下标,批量更改的话,
你只要把这个Array 拿出来,在程序里面改完,原方不动的放回去不就搞定了吗
二.Object
1.把other中 count 改为 199
db.Oldboy.update({"name":"路飞学城-骑士计划"},{$set:{"other.count":199}})
对了就是在这个对象 打点儿 key 就可以更改数值了 , 要注意的是, 咱们用的 $set 进行修改的,那么就意味着,如果没有"other.count"这个field的话,他会自动创建
2.混合用法
如果 count 小于 200 那么 加 10
三. Array 套 Object
首先,我们要先建立一条 Document
{ "_id" : ObjectId("5b17de9d44280738145722b9"), "name" : "路飞学城-骑士计划", "price" : [ { "start" : "2018年8月1日", "start_time" : "08:30", "count" : 150 }, { "start" : "2018年8月2日", "start_time" : "09:30", "count" : 160 }, { "start" : "2018年8月3日", "start_time" : "10:30", "count" : 170 }, { "start" : "2018年8月4日", "start_time" : "11:30", "count" : 180 } ] }
1.把count 大于 175 的field 加 15
2. 把 count 大于 180 的 start 改为 "2018年8月10日"
四. Object 套 Array
db.user.updateOne({"kecheng.class":15},{$set:{"kecheng.class.$":20}})