上一篇文章中介绍了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文档的增删改操作的更多相关文章

  1. 对mongo文档的增删改操作

    在mongo db 中增加.删除.修改文档有好多方法,这里简单记录一下我所知道的一些方法. 前置条件: 1.创建study数据库  use study; 2.创建persons集合,当第一次向pers ...

  2. Elasticsearch之文档的增删改查以及ik分词器

    文档的增删改查 增加文档 使用elasticsearch-head查看 修改文档 使用elasticsearch-head查看 删除文档 使用elasticsearch-head查看 查看文档的三种方 ...

  3. mongodb对数组元素及内嵌文档进行增删改查操作(转)

    from:https://my.oschina.net/132722/blog/168274 比如我有一个user类,他包含一个标签属性,这个标签是一个数组,数组里面的元素是内嵌文档,格式如下: &l ...

  4. MongoDB对数组元素及内嵌文档进行增删改查操作

    比如我有一个user类,他包含一个标签属性,这个标签是一个数组,数组里面的元素是内嵌文档,格式如下: {    "_id" : "195861",    &qu ...

  5. Mongodb的基本操作-数据库 集合 文档的增删改查

    数据库操作: //查看有哪些数据库 > show dbs local  0.078GB mydb   0.078GB //use操作将切换到一个数据库 如果数据库存在将直接切换 如果不存在 那么 ...

  6. 分布式搜索elasticsearch 索引文档的增删改查 入门

    1.RESTful接口使用方法 为了方便直观我们使用Head插件提供的接口进行演示,实际上内部调用的RESTful接口. RESTful接口URL的格式: http://localhost:9200/ ...

  7. Java对XML文档的增删改查

    JAVA增删改查XML文件   最近总是需要进行xml的相关操作. 不免的要进行xml的读取修改等,于是上网搜索,加上自己的小改动,整合了下xml的常用操作. 读取XML配置文件 首先我们需要通过Do ...

  8. head插件对elasticsearch 索引文档的增删改查

    1.RESTful接口使用方法 为了方便直观我们使用Head插件提供的接口进行演示,实际上内部调用的RESTful接口.  RESTful接口URL的格式: http://localhost:9200 ...

  9. Elasticsearch 索引文档的增删改查

    利用Elasticsearch-head可以在界面上(http://127.0.0.1:9100/)对索引进行增删改查 1.RESTful接口使用方法 为了方便直观我们使用Head插件提供的接口进行演 ...

随机推荐

  1. 很简洁的分页控件 适合MVC

    <!DOCTYPE html> <html lang="zh-cn" xmlns="http://www.w3.org/1999/xhtml" ...

  2. 【IntelliJ IDEA】idea上提交代码到GitHub,已经提交了 但是GitHub上却没有的解决办法

    摘要: 今天提交idea上的代码到GitHub,提交过程已经完成, 在版本控制的Log中可以看到,已经将这一部分都提交更新了    在版本控制的Local Changes中已经看不到提交过的代码了   ...

  3. (转)live555学习笔记9-h264 RTP传输详解(1)

    九 h264 RTP传输详解(1) 前几章对Server端的介绍中有个比较重要的问题没有仔细探究:如何打开文件并获得其SDP信息.我们就从这里入手吧. 当RTSPServer收到对某个媒体的DESCR ...

  4. Redis工业生产应用场景

    Redis应用场景 国内外三个不同领域巨头分享的Redis实战经验及使用场景 Redis的5个常见使用场景 Redis应用场景 Redis应用场景<张善友>

  5. [SQL Server] 复制数据库任务

    假设你要生产环境下的数据做相应的测试,比如修改及测试存储过程.更改和优化索引等.但是你用户在连接数据库的情况下,你又不能断开数据库的连接.如何取得数据库的副本呢? 一.  利用数据库任务中的复制数据库 ...

  6. PLSQL Developer删除奇葩表出现异常ORA-00942: 表或试图不存在

    简单描述一下问题:发现数据库里有两个名称相同的表,不同的是PLSQL Developer里一个表名显示是大写,而另一个表名显示是小写 一般情况下,无论建表语句是大写,还是小写,因Oracle是区分大小 ...

  7. windows下Nginx与tomcat组合简单使用

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 项目中瓦片资源越来越多,如果提高瓦片的访问效率是一个需要解决的 ...

  8. SAX解析XML笔记

    关于基本操作,请参考:Java用SAX解析XML,这里不重复造轮子了,以下是个人笔记:

  9. Mybatis最入门---数据库的下载与安装

    [一步是咫尺,一步即天涯] 近期.因为工作进度调整,之前的Spring教程就先临时告一段落了,兴许找个时间继续更新,假设有那位看官想了解某个内容的,敬请留言,大家一起学习. 作为数据库工具的使用开篇. ...

  10. linux cfs调度器

    在抽象模型中vruntime决定了进程被调度的先后顺序,在真实模型中决定被调度的先后顺序的参数是由函数entity_key决定的.   static inline s64 entity_key(str ...