MongoDB 之 $关键字 及 $修改器 $set $inc $push $pull $pop

一、查询中常见的 等于 大于 小于 大于等于 小于等于用法

$lt     //小于
$lte    //小于等于
$gt     //大于
$gte    //大于等于
$eq :   //等于
$ne     //不等于

  1.1 $eq:或者不写

  等于 : 在MongoDB中什么字段等于什么值其实就是 " : " 来搞定 比如 "name" : "路飞学城"

  

  1.2 $gt:

  大于 : 在MongoDB中的 大于 > 号 我们用 : $gt  比如 :  "score" : { $gt : 80 } 就是 得到 "score" 大于 80 的数据

  

  1.3 $lt:

  小于 : 在MongoDB中的 小于 < 号 我们用 : $lt  比如 :  "score" : { $lt : 80 } 就是 得到 "score" 小于 80 的数据

  

  1.4 $gte:

  大于等于 : 在MongoDB中的 大于等于 >= 号 我们用 : $gte  比如 :  "score" : { $gte : 80 } 就是 得到 "score" 大于等于 80 的数据

  

  1.5 $lte:

  小于等于 : 在MongoDB中的 小于等于 <= 号 我们用 : $lte  比如 :  "score" : { $lte : 80 } 就是 得到 "score" 小于等于 80 的数据

  

  这就是MongoDB中的运算符,是不是很类似我们使用的ORM中的运算符啊,没错,最开始的时候我们就已经说了,MongoDB的操作就是很类似ORM的

二.MongoDB中的那些个update修改器: $inc $set $unset $push $pull

  在此前的update中,我们用过$set,对数据进行过更新,其实在update中还存在很多的$关键字,我们把update中的这些关键字叫做 修改器

  修改器很多,这里挑一些重要的来说一说:

  2.1 $inc 用法:

   Python中的  变量 += 1 , 将查询到的结果 加上某一个值 然后保存

  

  还是刚才Collection数据,我们来试一下$inc , 让不及格的 "路飞学城2" 变成 60 分

  

  成功了 , {$inc:{"score":1}}的意思是,"score"的原有数值上面 +1,那我们再来实验一次,把60改为20,这怎么操作呢,其实可以理解为在 60 上加一个 -40

  

  2.2 $set 用法:

  此前我们已经提到过 $set 的用法和特性(没有就自动添加一条)了

  再做一个例子:把 "score" 为 100 分 的 "english_name" 赋值为 "LuffyCity"

  

  再把 "score" 为 20 分的 "score" 赋值为 59 分

  

  2.3 $unset 用法:

  定义:用来删除Key(field)的

  做一个小例子 : 刚才我们有一个新的"english_name" 这个field ,现在我们来删除它

  

  成功了! {$unset:{"english_name" : 1}} 就是删除 "english_name" 这个 field 相当于 关系型数据库中删除了 字段

  2. 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}}

  2.5 $pull 用法:

  有了$push 对Array类型进行增加,就一定有办法对其内部进行删减,$pull 就是指定删除Array中的某一个元素

  做一个例子: 把我们刚才$push进去的 6 删除掉

  

  问题来了,如果 Array 数据类型中 如果有 多个 6 怎么办呢?

  

  全部删掉了.....

  得出了一个结论,只要满足条件,就会将Array中所有满足条件的数据全部清除掉

  2.6  $pop 用法:

  定义:指定删除Array中的第一个 或 最后一个 元素

  做个小例子: 删除"score" 等于 100 分  test_list 的最后一个元素

  怎么删除第一个呢?

  {$pop:{"test_list" : -1}}  -1 代表最前面, 1 代表最后边 (这和我们大Python正好相反) 记住哦

 三、单独使用$语法(代指符)

  "$"  在 update 中 加上关键字 就 变成了 修改器

  其实 "$" 字符 独立出现也是有意义的 , 我起名叫做代指符

  首先看个例子: 还是这个Collection

  

  现在把 "score": 100 的 test_list 里面的 2 改为 9

  

  {$set :{"test_list.0" : 9}} 这样就是对应 Array 中的下标进行修改了 "test_list.下标"

  问题来了 如果 是 一个很长很长很长的 Array 你要查找其中一个值,把这个值修改一下怎么整呢?

  

  $ 字符 在语句中代表了什么呢? 下标,位置

  解释一下: 首先我们查询一下db.Oldboy.findOne({"score":100,"test_list":3}) 返回 给我们满足条件的数据对吧

  

  那么 如果 我们 使用 update的话, 满足条件的数据下标位置就会传递到 $ 字符中,在我们更新操作的时候就相当于 对这个位置 的元素进行操作

 

posted @ 2019-07-17 22:49  Amorphous  阅读(261)  评论(0编辑  收藏  举报