修改器是为了爱update文档时,不需要传入整个文档就能修改当前文档的某个属性值,修改器用法如下:

假设数据库中foo集合中存在如下文档:{"name":"jack","age":18}

db.foo.update({"name":"jack"},{"$inc":{"age":2}});  //这是一个修改器用法举例

则更新后的文档变为:{"name":"jack","age":20}

下面将介绍如下修改器

1.$set : 用来指定一个字段的值,如果该字段不存在则创建它。修改内嵌文档时支持 {"$set":{"author.name":"jack"}}的写法,即使author字段不存在也可以;

2.$unset: 用来删除一个字段,使用方法如下:db.foo.update({"name":"jack"},{"$unset":{"age":0}})   不管unset的键值对中值为false 还是为0、null,只要写了就会删除;

3.$inc:用来增加/减少已有键值,如果该键不存在就创建一个;只能增加数字值。数字值的字符串也不行。相应的减少传负值就可以了;

4.$push: 用来向数组中push一条数据,如果该数组不存在则创建。

             子操作符: $each 子操作符配合使用,如 {"$push":{"list":{"$each":[1,2,3]}}} , push后的数据为:{"list":[1,2,3]}   如果不用$each,则变为 {"list":[[1,2,3]]} 

                             $slice  限制push数组的长度,负数从后往前数,正数从前往后数,如{"$push":{"list":{"$each":[1,2,3],"$slice":-2}}},数据变为 {"list":[2,3]} 。 如原有数据{"list":[[1,2,3]]} ,此时{"$push":{"list":{"$each":[4,5,6],"$slice":-2}}},变为{"list":[[5,6]]},可见数据的截取范围是根据整体数据数组而言的

                             $sort   根据排序规则进行数组排序,-1 为降序,1为升序

以上的$slice 和 $sort必须和$push $each共同使用 

5.$ne : not equal ,在筛选条件时表示属性值不等于、或不包含该值,可用于update及find  如 db.foo.find({"list":{"$ne":2}})

6.$addToSet: 在向数组中push值时可以避免重复,用法和$push 相同,不过子操作符只能用$each

7.$pop: 从数组中删除一个元素, {"$pop":{"list":1}}  从后往前删除, {"$pop":{"list":-1}} 从前往后删除  无论list后面这个值传的几,都只删除1个

8.$pull: 从数组中删除指定的值 {"$pull":{"list":2}}  如果里面的相同的值有多个,则都删除

9.$:数组下标占位符,使用方法:比如元数据为 {comments:[{name:"jim",votes:0},{name:'mary',votes:1}]}  进行如下更新操作:db.foo.update({"comments.name":"mary"},{"$set":{"commnets.$.votes":3}})  如匹配条件有多个,只更新第一个

mongodb 学习笔记 2 --- 修改器的更多相关文章

  1. MongoDB学习笔记(2):数据库操作及CURD初步

    MongoDB学习笔记(2):数据库操作及CURD 数据库操作 创建数据库 首先MongoDB中数据库的创建和数据库的切换都是使用命令,USE DATABASE,如果要切换的数据库不存在则会进行创建, ...

  2. MongoDB学习笔记:MongoDB 数据库的命名、设计规范

    MongoDB学习笔记:MongoDB 数据库的命名.设计规范     第一部分,我们先说命名规范. 文档 设计约束 UTF-8 字符 不能包含 \0 字符(空字符),这个字符标识建的结尾 . 和 $ ...

  3. MongoDB学习笔记:快速入门

    MongoDB学习笔记:快速入门   一.MongoDB 简介 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.在高负载的情况下,添加更多的节点,可以保证服务器性能.M ...

  4. MongoDB学习笔记系列

    回到占占推荐博客索引 该来的总会来的,Ef,Redis,MVC甚至Sqlserver都有了自己的系列,MongoDB没有理由不去整理一下,这个系列都是平时在项目开发时总结出来的,希望可以为各位一些帮助 ...

  5. PHP操作MongoDB学习笔记

    <?php/*** PHP操作MongoDB学习笔记*///*************************//**   连接MongoDB数据库  **////*************** ...

  6. mongoDB 学习笔记纯干货(mongoose、增删改查、聚合、索引、连接、备份与恢复、监控等等)

    最后更新时间:2017-07-13 11:10:49 原始文章链接:http://www.lovebxm.com/2017/07/13/mongodb_primer/ MongoDB - 简介 官网: ...

  7. MongoDB学习笔记(五)--复制集 && sharding分片

    主从复制                                                                                       主从节点开启 主节 ...

  8. MongoDB学习笔记(四)--索引 && 性能优化

    索引                                                                                             基础索引 ...

  9. MongoDB学习笔记二- Mongoose

    MongoDB学习笔记二 Mongoose Mongoose 简介 之前我们都是通过shell来完成对数据库的各种操作, 在开发中大部分时候我们都需要通过程序来完成对数据库的操作 而Mongoose就 ...

随机推荐

  1. 【bzoj5001】搞事情 暴力

    题目描述 给定一个NM的01矩阵,每次可以选定一个位置,将它和它相邻格子的数取反.问:怎样操作使得所有格子都变为0.当有多组解时,优先取操作次数最小的:当操作次数相同时,优先取字典序最小的. 输入 第 ...

  2. Go语言【第十三篇】:Go语言递归函数

    Go语言递归函数 递归,就是在运行的过程中调用自己,语法格式如下: func recursion() { recursion() /* 函数调用自身 */ } func main() { recurs ...

  3. Luogu3147 USACO16OPEN 262144(动态规划)

    感觉上这个题是可以直接暴力的,每次根据一段连续最小值个数的奇偶性决定是否划分区间,递归处理.然而写起来实在太麻烦了. 设f[i][j]为以i为左端点合并出j时的右端点.则有f[i][j]=f[f[i] ...

  4. CentOS 文件特殊权限SUID,SGID,SBIT

    1.SUID ,是一种对二进制程序进行设置的特殊权限,可以让二进制程序的执行者临时拥有所有者的权限(仅对拥有执行权限的二进制程序有效). (1)SUID权限仅对二进制程序有效: (2)本权限仅在执行该 ...

  5. 【刷题】洛谷 P2709 小B的询问

    题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重 ...

  6. 项目管理---git----快速使用git笔记(三)------coding.net注册和新建项目(远程仓库)

    我们在第一章已经了解了github和coding.net的区别: github是一个基于git的代码托管平台,付费用户可以建私人仓库,我们一般的免费用户只能使用公共仓库,也就是代码要公开. codin ...

  7. bzoj1778: [Usaco2010 Hol]Dotp 驱逐猪猡(概率DP+高斯消元)

    深夜肝题...有害身心健康QAQ 设f[i]为到达i的概率,d[i]为i的度数. 因为无限久之后炸弹爆炸的概率是1,所以最后在i点爆炸的概率实际上就是f[i]/sigma(f[]) 列出方程组 f[i ...

  8. 全面解析JavaScript的Backbone.js框架中的Router路由

    这篇文章主要介绍了Backbone.js框架中的Router路由功能,Router在Backbone中相当于一个MVC框架中的Controller控制器功能,需要的朋友可以参考下. Backbone ...

  9. Python通过PhantomJS获取JS渲染后的网页源代码

    新建一个文件,命名为test.js,内容如下: var page = require('webpage').create(), system = require('system'), address; ...

  10. snmp代码篇

    相关链接:Snmp学习笔记使用snmp4j实现Snmp功能(一)使用snmp4j实现Snmp功能(二)使用snmp4j实现Snmp功能(三) SNMP是英文“Simple Network Manage ...