mongodb 学习笔记 2 --- 修改器
修改器是为了爱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 --- 修改器的更多相关文章
- MongoDB学习笔记(2):数据库操作及CURD初步
MongoDB学习笔记(2):数据库操作及CURD 数据库操作 创建数据库 首先MongoDB中数据库的创建和数据库的切换都是使用命令,USE DATABASE,如果要切换的数据库不存在则会进行创建, ...
- MongoDB学习笔记:MongoDB 数据库的命名、设计规范
MongoDB学习笔记:MongoDB 数据库的命名.设计规范 第一部分,我们先说命名规范. 文档 设计约束 UTF-8 字符 不能包含 \0 字符(空字符),这个字符标识建的结尾 . 和 $ ...
- MongoDB学习笔记:快速入门
MongoDB学习笔记:快速入门 一.MongoDB 简介 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.在高负载的情况下,添加更多的节点,可以保证服务器性能.M ...
- MongoDB学习笔记系列
回到占占推荐博客索引 该来的总会来的,Ef,Redis,MVC甚至Sqlserver都有了自己的系列,MongoDB没有理由不去整理一下,这个系列都是平时在项目开发时总结出来的,希望可以为各位一些帮助 ...
- PHP操作MongoDB学习笔记
<?php/*** PHP操作MongoDB学习笔记*///*************************//** 连接MongoDB数据库 **////*************** ...
- mongoDB 学习笔记纯干货(mongoose、增删改查、聚合、索引、连接、备份与恢复、监控等等)
最后更新时间:2017-07-13 11:10:49 原始文章链接:http://www.lovebxm.com/2017/07/13/mongodb_primer/ MongoDB - 简介 官网: ...
- MongoDB学习笔记(五)--复制集 && sharding分片
主从复制 主从节点开启 主节 ...
- MongoDB学习笔记(四)--索引 && 性能优化
索引 基础索引 ...
- MongoDB学习笔记二- Mongoose
MongoDB学习笔记二 Mongoose Mongoose 简介 之前我们都是通过shell来完成对数据库的各种操作, 在开发中大部分时候我们都需要通过程序来完成对数据库的操作 而Mongoose就 ...
随机推荐
- MEX程序中的mexFunction函数【转】
与C中的main函数一样,MEX程序中的开始函数为mexFunction.默认变量参数是: void mexFunction(int nlhs, mxArray *plhs[], int nrhs, ...
- RT-thread内核之消息队列
一.消息队列控制块:在include/rtdef.h中 #ifdef RT_USING_MESSAGEQUEUE /** * message queue structure */ struct rt_ ...
- 静态方法不能使用this的原因 当没有实例对象时候 在静态方法里面传入this时会出现空指针异常现象 所以为了防止该现象 静态方法里面不能使用this
静态方法不能使用this的原因 当没有实例对象时候 在静态方法里面传入this时会出现空指针异常现象 所以为了防止该现象 静态方法里面不能使用this
- iOS开发简单介绍
概览 终于到了真正接触IOS应用程序的时刻了,之前我们花了很多时间去讨论C语言.ObjC等知识,对于很多朋友而言开发IOS第一天就想直接看到成果,看到可以运行的iOS程序.但是这里我想强调一下,前面的 ...
- Android UI设计的基本元素有哪些
在android app开发如火如荼的今天,如何让自己的App受人欢迎.如何增加app的下载量和使用量....成为很多android应用开发前,必须讨论的问题.而ui设计则是提升客户视觉体验度.提升下 ...
- [luogu2783] 有机化学之神偶尔会做作弊
题目链接 洛谷. Solution 边双缩点然后\(lca\)跑\(dis\)就好了. 注意这里是边双,不知道为啥所有题解都说的是点双. 边双是定义在点上的,即每个点只属于一个边双:点双是定义在边上的 ...
- [洛谷P3224][HNOI2012]永无乡
题目大意:给你$n$个点,每个点有权值$k$,现有两种操作: 1. $B\;x\;y:$将$x,y$所在联通块合并2. $Q\;x\;k:$查询第$x$个点所在联通块权值第$k$小是哪个数 题解:线段 ...
- [JXOI2017]颜色 线段树扫描线 + 单调栈
---题面--- 题解: 首先题目要求删除一些颜色,换个说法就是要求保留一些颜色,那么观察到,如果我们设ll[i]和rr[i]分别表示颜色i出现的最左边的那个点和最右边的那个点,那么题目就是在要求我们 ...
- 算法学习 拓扑排序(TopSort)
拓扑排序 一.基本概念 在一个有向无环图(Directed Acyclic Graph, DAG)中,规定< u,v > 表示一条由u指向v的的有向边.要求对所有的节点排序,使得每一条有向 ...
- Activity及Intent
1.Activity 在一个Android应用程序中,Activity是为用户操作而展示的可视化界面.比如你要打电话,这个时候的拨号界面就是一个Activity,你要发短信给你的女朋友,这个短信窗口就 ...