MongoDB文档的增删改操作
上一篇文章中介绍了MongoDB的一些基本知识,同时看到了怎么启动一个MongoDB服务,并且通过MongoDB自带的shell工具连接到了服务器。
这一次,就通过MongoDB shell介绍一下对文档的增删改操作。
增加新文档
接着上一篇文章,打开一个MongoDB shell。
通过“show dbs”可以看到所有的数据库。然后我们通过“use blog”切换到blog数据库来开始下面的演示。
使用“db”命令显示当前正在使用的数据库。
- 1 C:\mongodb\bin>mongo.exe
- 2 MongoDB shell version: 2.4.6
- 3 connecting to: test
- 4 > show dbs
- 5 local 0.078125GB
- 6 >
- 7 > use blog
- 8 switched to db blog
- 9 >
- 10 > db
- 11 blog
- 12 >
接下来就开始新建文档,插入文档的操作了
- > post1 = {"title":"learn MongoDB", "author":"Wilber", "date":new Date()}
- {
- "title" : "learn MongoDB",
- "author" : "Wilber",
- "date" : ISODate("2014-11-29T06:19:32.556Z")
- }
- > db.blog.posts.insert(post1)
- > db.blog.posts.find()
- { "_id" : ObjectId("5479657a421b7f1536cfb1f7"), "title" : "learn MongoDB", "author" : "Wilber", "date" : ISODate("2014-1
- -29T06::.556Z") }
- > show collections
- blog.posts
- system.indexes
- >
通过相同的方式插入新的文档。
- post2 = {"title":"learn English", "author":"Will", "date":new Date()}
- post3 = {"title":"learn C#", "author":"Li", "date":new Date()}
- post4 = {"title":"learn SQL", "author":"July", "date":new Date()}
删除文档
通过remove操作,可以对文档进行删除。如果没有任何参数,remove将会删除collection中所有的文档,而且删除操作是不可逆的,所以要小心操作。
- > db.blog.posts.remove()
- > db.blog.posts.find()
- >
同时,remove操作可以支持条件删除。
- > db.blog.posts.find()
- { "_id" : ObjectId("547967c1421b7f1536cfb1fe"), "title" : "learn MongoDB", "author" : "Wilber", "date" : ISODate("2014-1
- -29T06::.318Z") }
- { "_id" : ObjectId("547967c1421b7f1536cfb1ff"), "title" : "learn English", "author" : "Will", "date" : ISODate("2014-11-
- 29T06::.349Z") }
- { "_id" : ObjectId("547967c1421b7f1536cfb200"), "title" : "learn C#", "author" : "Li", "date" : ISODate("2014-11-29T06:2
- :.365Z") }
- { "_id" : ObjectId("547967c2421b7f1536cfb201"), "title" : "learn SQL", "author" : "July", "date" : ISODate("2014-11-29T0
- ::.380Z") }
- >
- >
- > db.blog.posts.remove({"author":"Will"})
- > db.blog.posts.find()
- { "_id" : ObjectId("547967c1421b7f1536cfb1fe"), "title" : "learn MongoDB", "author" : "Wilber", "date" : ISODate("2014-1
- -29T06::.318Z") }
- { "_id" : ObjectId("547967c1421b7f1536cfb200"), "title" : "learn C#", "author" : "Li", "date" : ISODate("2014-11-29T06:2
- :.365Z") }
- { "_id" : ObjectId("547967c2421b7f1536cfb201"), "title" : "learn SQL", "author" : "July", "date" : ISODate("2014-11-29T0
- ::.380Z") }
- >
更新文档
可以通过update方法更新数据库中的文档,update有两个参数,一个是查询文档,用来找出要更新的文档,另一个是修改器文档,描述多找到的文档进行怎样的更新。
文档的更新可以分为两种:文档替换和使用修改器更新
文档替换
当文档的模式变化很大的时候,一般都是采用文档替换的方式进行文档更新。
- > post1.detailInfo = {"author":"Wilber","description":"this is a post about MongoDB"}
- { "author" : "Wilber", "description" : "this is a post about MongoDB" }
- > delete post1.author
- true
- > db.blog.posts.update({"author":"Wilber"}, post1)
- > db.blog.posts.find({"detailInfo.author":"Wilber"})
- { "_id" : ObjectId("547971c5421b7f1536cfb202"), "title" : "learn MongoDB", "date" : ISODate("2014-11-29T07:12:05.560Z"),
- "detailInfo" : { "author" : "Wilber", "description" : "this is a post about MongoDB" } }
- >
修改器更新
对于只需要部分更新的文档,通过修改器更新会很方便。直接上例子。
$set: 修改文档的一个指定键的值,如果没有则创建。
- > db.blog.posts.update({"author":"Li"}, {$set: {"title":"how to learn C#"}})
- > db.blog.posts.find({"author":"Li"})
- { "_id" : ObjectId("547971c5421b7f1536cfb204"), "author" : "Li", "date" : ISODate("2014-11-29T07:12:05.591Z"), "title" :
- "how to learn C#" }
- > db.blog.posts.update({"author":"Li"}, {$set: {"age":}})
- > db.blog.posts.find({"author":"Li"})
- { "_id" : ObjectId("547971c5421b7f1536cfb204"), "age" : , "author" : "Li", "date" : ISODate("2014-11-29T07:12:05.591Z"
- ), "title" : "how to learn C#" }
- >
$addToSet, $push, $pop:这三个都是对数组的操作,$addToSet能够避免重复添加
- > comments = []
- [ ]
- > comment0 = {"score": , "content":"just so so"}
- { "score" : , "content" : "just so so" }
- > comment1 = {"score": , "content":"very good"}
- { "score" : , "content" : "very good" }
- >
- > db.blog.posts.update({"author":"Li"}, {$set: {"comments": comments}})
- > db.blog.posts.update({"author":"Li"}, {$set: {"comments.0": comment0}})
- > db.blog.posts.update({"author":"Li"}, {$set: {"comments.1": comment1}})
- > db.blog.posts.update({"author":"Li"}, {$addToSet: {"comments": comment1}})
- > db.blog.posts.find({"author":"Li"})
- { "_id" : ObjectId("547971c5421b7f1536cfb204"), "age" : , "author" : "Li", "comments" : [ { "score" : ,
- "content" : "just so so" }, { "score" : , "content" : "very good" } ], "date" : ISODate("2014-11-29T07:12:
- .591Z"), "title" : "how to learn C#" }
- > db.blog.posts.update({"author":"Li"}, {$push: {"comments": comment1}})
- > db.blog.posts.find({"author":"Li"})
- { "_id" : ObjectId("547971c5421b7f1536cfb204"), "age" : , "author" : "Li", "comments" : [ { "score" : ,
- "content" : "just so so" }, { "score" : , "content" : "very good" }, { "score" : , "content
- " : "very good" } ], "date" : ISODate("--29T07::.591Z"), "title" : "how to learn C#" }
- > db.blog.posts.update({"author":"Li"}, {$pop: {"comments": comment1}})
- > db.blog.posts.find({"author":"Li"})
- { "_id" : ObjectId("547971c5421b7f1536cfb204"), "age" : , "author" : "Li", "comments" : [ { "score" : ,
- "content" : "just so so" }, { "score" : , "content" : "very good" } ], "date" : ISODate("2014-11-29T07:12:
- .591Z"), "title" : "how to learn C#" }
- >
$inc:这个跟$set的用法类似,只不过$inc是专门针对数字操作的。
- > db.blog.posts.update({"author":"Li"}, {$inc: {"comments.1.score": }})
- > db.blog.posts.find({"author":"Li"})
- { "_id" : ObjectId("547971c5421b7f1536cfb204"), "age" : , "author" : "Li", "comments" : [ { "score" : ,
- "content" : "just so so" }, { "score" : , "content" : "very good" } ], "date" : ISODate("2014-11-29T07:12:
- .591Z"), "title" : "how to learn C#" }
- >
$unset:这个命令是用来删除指定键的。
- > db.blog.posts.update({"author":"Li"}, {$unset: {"comments": }})
- > db.blog.posts.find({"author":"Li"})
- { "_id" : ObjectId("547971c5421b7f1536cfb204"), "age" : , "author" : "Li", "date" : ISODate("2014-11-29T07:12:05.591Z"
- ), "title" : "how to learn C#" }
update(arg1, arg2, arg3, arg4)
上面已经介绍了update的前两个参数的含义和用法,其实update命令还有两个参数。
arg3:这个参数代表upsert用法;如果这个参数设置为true,那么就会使用upsert的方式更新文档。
- > db.blog.posts.update({"author":"June"}, {"author": "June", "title": "C++ introduction"}, true)
- > db.blog.posts.find({"author":"June"})
- { "_id" : ObjectId("5479781d217928d2be69552c"), "author" : "June", "title" : "C++ introduction" }
- >
arg4:这个参数可以设置是否批量更新
- > db.blog.posts.insert(post1)
- > db.blog.posts.find({"detailInfo.author":"Wilber"})
- { "_id" : ObjectId("547971c5421b7f1536cfb202"), "title" : "learn MongoDB", "date" : ISODate("2014-11-29T07:12:05.560Z"),
- "detailInfo" : { "author" : "Wilber", "description" : "this is a post about MongoDB" } }
- { "_id" : ObjectId("54797864421b7f1536cfb206"), "title" : "learn MongoDB", "date" : ISODate("2014-11-29T07:12:05.560Z"),
- "detailInfo" : { "author" : "Wilber", "description" : "this is a post about MongoDB" } }
- > db.blog.posts.update({"detailInfo.author":"Wilber"}, {$set: {"title":"how to learn MongoDB"}}, false, true)
- >
- > db.blog.posts.find({"detailInfo.author":"Wilber"})
- { "_id" : ObjectId("54797864421b7f1536cfb206"), "date" : ISODate("2014-11-29T07:12:05.560Z"), "detailInfo" : { "author"
- : "Wilber", "description" : "this is a post about MongoDB" }, "title" : "how to learn MongoDB" }
- { "_id" : ObjectId("547971c5421b7f1536cfb202"), "date" : ISODate("2014-11-29T07:12:05.560Z"), "detailInfo" : { "author"
- : "Wilber", "description" : "this is a post about MongoDB" }, "title" : "how to learn MongoDB" }
- >
总结
这篇文章主要介绍了通过MongoDB shell对数据库文档进行增删改操作,接下来会介绍查询的操作。
Ps: 附件包含了本文中的所有命令作为参考。
http://files.cnblogs.com/wilber2013/test.js
MongoDB文档的增删改操作的更多相关文章
- 对mongo文档的增删改操作
在mongo db 中增加.删除.修改文档有好多方法,这里简单记录一下我所知道的一些方法. 前置条件: 1.创建study数据库 use study; 2.创建persons集合,当第一次向pers ...
- Elasticsearch之文档的增删改查以及ik分词器
文档的增删改查 增加文档 使用elasticsearch-head查看 修改文档 使用elasticsearch-head查看 删除文档 使用elasticsearch-head查看 查看文档的三种方 ...
- mongodb对数组元素及内嵌文档进行增删改查操作(转)
from:https://my.oschina.net/132722/blog/168274 比如我有一个user类,他包含一个标签属性,这个标签是一个数组,数组里面的元素是内嵌文档,格式如下: &l ...
- MongoDB对数组元素及内嵌文档进行增删改查操作
比如我有一个user类,他包含一个标签属性,这个标签是一个数组,数组里面的元素是内嵌文档,格式如下: { "_id" : "195861", &qu ...
- Mongodb的基本操作-数据库 集合 文档的增删改查
数据库操作: //查看有哪些数据库 > show dbs local 0.078GB mydb 0.078GB //use操作将切换到一个数据库 如果数据库存在将直接切换 如果不存在 那么 ...
- 分布式搜索elasticsearch 索引文档的增删改查 入门
1.RESTful接口使用方法 为了方便直观我们使用Head插件提供的接口进行演示,实际上内部调用的RESTful接口. RESTful接口URL的格式: http://localhost:9200/ ...
- Java对XML文档的增删改查
JAVA增删改查XML文件 最近总是需要进行xml的相关操作. 不免的要进行xml的读取修改等,于是上网搜索,加上自己的小改动,整合了下xml的常用操作. 读取XML配置文件 首先我们需要通过Do ...
- head插件对elasticsearch 索引文档的增删改查
1.RESTful接口使用方法 为了方便直观我们使用Head插件提供的接口进行演示,实际上内部调用的RESTful接口. RESTful接口URL的格式: http://localhost:9200 ...
- Elasticsearch 索引文档的增删改查
利用Elasticsearch-head可以在界面上(http://127.0.0.1:9100/)对索引进行增删改查 1.RESTful接口使用方法 为了方便直观我们使用Head插件提供的接口进行演 ...
随机推荐
- 【oneday_onepage】——The Secret Of Steve<1>
The Secret Of SteveThe secret of Steve is simple. It explains his success and excess. It exemplifies ...
- linux 木马清理过程
服务器出现异常,完全无法访问,ssh登陆都极其缓慢 解决过程 top 查看系统状态,发现 load average 平均负载值非常高,再看排名第一的进程,是一个不认识的进程名:minerd 感觉是被入 ...
- JSONObject遍历获取键值方法合并两个JSONObject
JSONObject obj1= new JSONObject(); try { obj1.put("obj1_data", obj1_data); if (null != obj ...
- 关于css定位
关于定位要弄清一个概念,那就是"文档流" 什到是文档流 说得简单一点 就是 自上而下 从左到右 生成顺序 关于html元素又分为两种 块状元素 内联元素 块状元素:单独占一行 内联 ...
- Linux中添加快捷
执行操作比较快捷: 1.R3 CGP平台下OMU系统中: Linux 版本:2.6.16.60-0.21-bigsmp vi /etc/profile 2.R2 Linux版本2.6.5-7.244- ...
- Mac OS, Mac OSX 与Darwin
作为收购 NeXT 公司的结果,苹果公司获得了 NeXTSTEP 架构中的 Mach 和 Objective-C 等设计.尽管 NeXTSTEP 本身已经不再发展了,但是其中的组件在 OS X 中获得 ...
- 【1】JVM-内存模型
本篇其实就是一个读书笔记,书是<深入理解JAVA虚拟机>,在网上搜索JAVA内存,说的比较好的其实很多都源自这本书,作为一个JAVA程序员,理解虚拟机是通向高级程序员的必经道路.本篇中的图 ...
- php base64_encode,serialize对于存入数据表中字段的数据处理方案
A better way to save to Database $toDatabse = base64_encode(serialize($data)); // Save to database $ ...
- ubuntu安装mongo数据库
安装mongo数据库,在shell下输入 sudo apt-get install mongodb 如果需要在Python中使用mongo数据库,还需要额外安装Python封装库 pip instal ...
- PCL(Point Cloud Library)的第三方库简单介绍(boost,eigen,flann,vtk,qhull)
PCL由于融合了大量的第三方开源库,导致学习成本升高~在学习之前我们最好还是了解一下这些库都是干嘛的,以便有的放矢.在之后更好的使用 boost: C++的标准库的备用版,擅长从数学库到智能指针,从模 ...