一、插入\创建文档

--当插入一个不存在的文档时,会自己主动创建一个文档

[root@racdb ~]# mongo

MongoDB shell version: 2.4.14

connecting to: test

> show collections

> db.cols.insert({bar:"baz"})

> db.cols.find()

{ "_id" :ObjectId("56aac1df4e61b6d9f84d17e0"), "bar" :"baz" }

二、删除文档

--删除全部文档

> db.cols.remove()

--删除符合条件的文档

> db.cols.remove({bar:"baz"})

注意:db.cols.remove()不会删除cols集合本身,原有索引也会保留

三、更新文档

文档替换

--假设把以下文档

>db.users.findOne({"name":"licz"})

{

"_id" : ObjectId("56a8828b308203e00e436b01"),

"name" : "licz",

"friends" : 43,

"enemies" : 5

}

--更新成以下文档

{

"_id" : ObjectId("56a8828b308203e00e436b01"),

"relationships" : {

"friends" : 43,

"enemies" : 5

},

"username" : "licz"

}

更新方法:

> licz.relationships ={"friends":licz.friends,"enemies":licz.enemies}

{ "friends" : 43,"enemies" : 5 }

> licz.username = licz.name

licz

> delete licz.friends

true

> delete licz.enemies

true

> delete licz.name

true

>db.users.findOne({"name":"licz"})

{

"_id" : ObjectId("56a8828b308203e00e436b01"),

"name" : "licz",

"friends" : 43,

"enemies" : 5

}

>db.users.update({name:"licz"},licz)

>db.users.findOne({"username":"licz"})

{

"_id" : ObjectId("56a8828b308203e00e436b01"),

"relationships" : {

"friends" : 43,

"enemies" : 5

},

"username" : "licz"

}

使用改动器

1. $set

$set用来改动指定键的值,假设键不存在,就创建它。

>db.users.findOne({"name":"haley"})

{

"_id" : ObjectId("4b253b067525f35f94b60a31"),

"name" : "haley",

"age" : 30,

"sex" : "male"

}

--增加文档的键值对

> db.users.update({"name":"haley"},{"$set":{"location":"china"}})

> db.users.update({"name":"haley"},{"$set":{"favoritebook":"war and peace"}})

>db.users.findOne({"name":"haley"})

{

"_id" : ObjectId("4b253b067525f35f94b60a31"),

"name" : "haley",

"age" : 30,

"sex" : "male",

"location" : "china",

"favorite book" : "war and peace"

}

--改动"favoritebook"键的值

> db.users.update({"name":"haley"},{"$set":{"favoritebook":"green eggs and ham"}})

>db.users.findOne({"name":"haley"})

{

"_id" : ObjectId("4b253b067525f35f94b60a31"),

"name" : "haley",

"age" : 30,

"sex" : "male",

"location" : "china",

"favorite book" : "green eggs and ham"

}

2. $inc

$inc用来增加/降低文档中键的值,相同假设键不存在,就创建它

>db.analytics.findOne({"url":"www.example.com"})

{

"_id" : ObjectId("4b253b067525f35f94b60a31"),

"url" : "www.example.com",

"pageviews" : 54

}

>db.analytics.update({"url":"www.example.com"},{"$inc":{"pageviews":1}})

>db.analytics.findOne({"url":"www.example.com"})

{

"_id" : ObjectId("4b253b067525f35f94b60a31"),

"url" : "www.example.com",

"pageviews" : 55

}

--增加"visits"键值对

>db.analytics.update({"url":"www.example.com"},{"$inc":{"visits":3}})

>db.analytics.findOne({"url":"www.example.com"})

{

"_id" : ObjectId("4b253b067525f35f94b60a31"),

"url" : "www.example.com",

"pageviews" : 55,

"visits" : 3

}

注意:能够看$set和$inc改动器的差别:

$set是改动字符型的键值,$inc是改动数值型的键值;都是在不存在键时会自己主动增加上。

数据组改动器

3. $push

$push作用:假设指定的键存在,$push会向已有数组末尾增加一个元素,要是没有就会创建一个新的数据。

>db.blog.posts.findOne({"title":"A Oracle error summary"})

{

"_id" :ObjectId("56aad2744e61b6d9f84d17e1"),

"title" : "A Oracle error summary",

"content" : "..."

}

> db.blog.posts.update({"title":"AOracle error summary"},

...{"$push":{"comments":{"name":"licz","email":"licz@163.com","content":"goodpost!"}}})

>db.blog.posts.findOne({"title":"A Oracle error summary"})

{

"_id" : ObjectId("56aad2744e61b6d9f84d17e1"),

"title" : "A Oracle error summary",

"content" :"...",

"comments" : [

{

"name" :"licz",

"email" :"licz@163.com",

"content" :"good post!"

}

]

}

--再次加一个数据元素

... {"$push":{"comments":{"name":"haley","email":"haley@qq.com","content":"thankyou post"}}})

>db.blog.posts.findOne({"title":"A Oracle error summary"})

{

"_id" : ObjectId("56aad2744e61b6d9f84d17e1"),

"title" : "A Oracle error summary",

"content" : "...",

"comments" : [

{

"name" :"licz",

"email" :"licz@163.com",

"content" :"good post!"

},

{

"name" :"haley",

"email" :"haley@qq.com",

"content" :"thank you post"

}

]

}

4. $ne

$ne能够对键做一些推断,如:使用$ne和$push组,假设一个值不在数组里面就把他加进去,避免插入反复值

> db.papers.findOne()

{

"_id" : ObjectId("56aadaaa4e61b6d9f84d17e2"),

"title" : "People life",

"content" : "..."

}

>db.papers.update({"authorscited":{"$ne":"Richie"}},

...{"$push":{"authorscited":"Richie"}})

> db.papers.findOne()

{

"_id" : ObjectId("56aadaaa4e61b6d9f84d17e2"),

"title" : "People life",

"content" : "...",

"authors cited" : [

"Richie"

]

}

--再次增加相同元素,文档没有变化

> db.papers.update({"authorscited":{"$ne":"Richie"}},

...{"$push":{"authorscited":"Richie"}})

> db.papers.findOne()

{

"_id" : ObjectId("56aadaaa4e61b6d9f84d17e2"),

"title" : "People life",

"content" : "...",

"authors cited" : [

"Richie"

]

}

5. $addToSet

$addToSet作用:能够取代$ne和$push组全,在数组里增加一个元素且能增加多个元素,也能避免插入反复值

>db.users.findOne({"username":"licz"}

{

"_id" : ObjectId("56a8828b308203e00e436b01"),

"relationships" : {

"friends" : 43,

"enemies" : 5

},

"username" : "licz"

}

> db.users.update({"username":"licz"},{"$addToSet":{"email":"licz@163.com"}})

>db.users.findOne({"username":"licz"})

{

"_id" : ObjectId("56a8828b308203e00e436b01"),

"relationships" : {

"friends" : 43,

"enemies" : 5

},

"username" : "licz",

"email" : [

"licz@163.com"

]

}

--再运行增加数组元素

> db.users.update({"username":"licz"},{"$addToSet":{"email":"licz@qq.com"}})

> db.users.findOne({"username":"licz"})

{

"_id" : ObjectId("56a8828b308203e00e436b01"),

"relationships" : {

"friends" : 43,

"enemies" : 5

},

"username" : "licz",

"email" : [

"licz@163.com",

"licz@qq.com"

]

}

6. $each

$addToSet和$each组合,能够为数组增加多个不同的值

> db.users.update({"username":"licz"},

...{"$addToSet":{"email":{"$each":["licz@umessage.com","licz@sina.com"]}}})

>db.users.findOne({"username":"licz"})

{

"_id" : ObjectId("56a8828b308203e00e436b01"),

"relationships" : {

"friends" : 43,

"enemies" : 5

},

"username" : "licz",

"email" : [

"licz@163.com",

"licz@qq.com",

"licz@umessage.com",

"licz@sina.com"

]

}

7. $pop

$pop改动器能够从数组不论什么一端删除元素。

{$pop:{key:1}}从末尾端删除元素

{$pop:{key:-1}}从开头端删除元素

8. $pull

$pull能够基于特定条件来删除数组元素,而不仅仅是根据位置

>db.lists.insert({"todo":["dishs","laundry","drycleaning"]})

> db.lists.update({},{"$pull":{"todo":"laundry"}})

> db.lists.findOne()

{

"_id" : ObjectId("56aafd4a4e61b6d9f84d17e3"),

"todo" : [

"dishs",

"dry cleaning"

]

}

$pull会将全部匹配的部分删掉。对数组[1,1,2,1]运行pull 1,得到的结果是仅仅有一个元素[2]

数组的定位改动器

有两种方法操作数组中的值:通过位置和定位操作符$

数组都是以0开头的,能够直接用下标直接作为键来选择元素。例如以下

>db.blog.posts.findOne({"title" : "A blog post"})

{

"_id" : ObjectId("4b2d75476cc613d5ee930164"),

"title" : "A blog post",

"content" : "...",

"comments" : [

{

"name" :"joe",

"email" :"joe@example.com",

"content" :"nice post."

},

{

"name" :"bob",

"email" :"bob@example.com",

"content" :"good post."

}

]

}

>db.blog.posts.update({"title" : "A blogpost"},{"$inc":{"comments.0.visits" : 1}})

>db.blog.posts.findOne({"title" : "A blog post"})

{

"_id" : ObjectId("4b2d75476cc613d5ee930164"),

"title" : "A blog post",

"content" : "...",

"comments" : [

{

"name" :"joe",

"email" :"joe@example.com",

"content" :"nice post.",

"visits" : 1

},

{

"name" :"bob",

"email" :"bob@example.com",

"content" : "goodpost."

}

]

}

但非常多情况我们不知道要改动数组下标是多少,这时就能够使用定位操作符$,用来定位查询文档已经匹配的元素,并进行更新。

>db.blog.posts.update({"comments.name":"bob"},{"$set":{"comments.$.name":"licz"}})

>db.blog.posts.findOne({"title" : "A blog post"})

{

"_id" : ObjectId("4b2d75476cc613d5ee930164"),

"title" : "A blog post",

"content" : "...",

"comments" : [

{

"name" :"joe",

"email" :"joe@example.com",

"content" :"nice post.",

"visits" : 1

},

{

"name" :"licz",

"email" :"bob@example.com",

"content" :"good post."

}

]

}

upsert更新方法

upsert是一种特殊的更新。要是没有文档符合更新条件,就会以这个条件创建一个新文档,假设匹配就更新。

事实上就是update的第三參数。默认就是false.

> db.analytics.find()

{ "_id" :ObjectId("56a88706308203e00e436b04"), "url" :"www.baidu.com", "pageview" : 2, "visits" : 3 }

> db.analytics.update({"url":"www.csdn.net"},{"$inc":{"visits": 1}},true)

> db.analytics.find()

{ "_id" :ObjectId("56a88706308203e00e436b04"), "url" :"www.baidu.com", "pageview" : 2, "visits" : 3 }

{ "_id" :ObjectId("56ab094c638a1346c373d5d9"), "url" :"www.csdn.net", "visits" : 1 }

save 函数

save是一个shell函数,能够文档不存在时插入,存在时更新。它仅仅有一个參数:文档

使用例如以下:

> var x=db.foo.findOne()

> x.sum = 50

50

> db.foo.save(x)

> db.foo.find()

{ "_id" :ObjectId("56a88f55308203e00e436b07"), "count" :"1", "num" : 42, "sum" : 50 }

更新很多其它的文档

默认情况下,更新仅仅能对条件的第一个文档运行操作。

要使用全部文档都得到更新,能够设置update的第4个參数为ture,默认是false

比如:

给全部特定日期过生日的用户发一份礼物,就可使用多文档更新。将gift增加到他们的账号.

>db.users.update({"birthday":"1988/11/1"},{"$set":{gift:"Happybirthday!"}},false,true)

--查看更新了多少文档。n就是这个值

> db.runCommand({getLastError : 1})

{

"connectionId" : 13,

"n" : 3,

"syncMillis" : 0,

"writtenTo" : null,

"err" : null,

"ok" : 1

}

MongoDB创建\更新\删除文档操作的更多相关文章

  1. 《mongoDB》基本操作-创建/更新/删除文档

    一:基本操作 - db; 当前选择的集合(等于数据库名) > db demo -  use db_name; 选择你要操作的集合 > use demo switched to db dem ...

  2. MongoDB(二)创建更新删除文档

    插入并保存文档操作 用insert向目标集合插入文档,如果没有_id键则会自动添加.最后自动保存. >db.foo.insert({"bar":"baz" ...

  3. 2.MongoDB系列之创建更新删除文档

    1. 插入文档 // 单条插入 db.getCollection('blog').insertOne({'type': 'mongodb'}) // 批量 插入 db.getCollection('b ...

  4. MongoDB改动、删除文档的域属性实例

    MongoDB改动.删除文档的域属性实例 在站点的开发中,可能最初的设计不合理.或者后期业务的变更,会造成文档结构会有些无用的属性.须要去删除或改动.因为MongoDB 是无 Schema 的,不像关 ...

  5. es之java删除文档操作

    删除文档操作 @Test public void deleteDocument(){ DeleteResponse response = client.prepareDelete("twit ...

  6. MongoDB系列---集合与文档操作03

    MongoDB-——Collection 学习大纲: 1.集合操作 2.文档操作 知识回顾: 上一篇我们讲述了如何对MongoDB的权限和用户进行日常的基本操作,来达到我们对数据库的基本安全保障. 一 ...

  7. mongodb学习之:文档操作

    在上一章中有讲到文档的插入操作是用insert的方法.如果该集合不在该数据库中,mongodb会自动创建该集合并插入文档 用find的方法可以查找所有的集合数据 > db.maple.find( ...

  8. sharepoint中的Power Shell命令创建、删除文档库列表

    ListTemplateType 枚举: 自定义列表-GenericList.文档库-DocumentLibrary.图片库-PictureLibrary.公告-Announcements.联系人-C ...

  9. ElasticSearch 7.3.0 查询、修改、删除 文档操作

    PUT chuyuan/_doc/ { "name":"xiaolin", , "sex":"F", "lov ...

随机推荐

  1. 非阻塞IO函数

    关于效率的优化:

  2. Quartz2D二维画图引擎

    Quartz2D二维画图引擎 这个二维画图引擎的功能很强大 一般苹果公司xcode 提供给我们的一些UI控件不能满足我们的需求 所以我们会自己定义控件 xcode 提供的全部控件都是由这个画图引擎画出 ...

  3. Android——隐藏输入法的小技巧

    今天偶然在百度地图提供的DEMO里看到这样一段代码.认为确实是个小技巧,就写下来分享一下. 针对的问题: 我们在开发android界面的时候,常常使用EditText控件.然后每次进入这个页面的时候, ...

  4. Ubuntu14.04编译WebRTC For Android代码 2014-07-24

    整整快一年没有写博客了.近期基于Google开源的WebRTC项目做了一款音视频聊天的即时通信项目,期间在下载WebRTC代码时就碰到了一些问题.在此以作记录,也希望可以帮助到正在下载编译WebRTC ...

  5. POJ 1236--Network of Schools【scc缩点构图 && 求scc入度为0的个数 && 求最少加几条边使图变成强联通】

    Network of Schools Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 13325   Accepted: 53 ...

  6. [yueqian_scut]Android多点触控技术和应用框架

    Android多点触控技术跟Linux输入子系统紧密相关.本文将从应用的角度说明Android多点触控技术的接口和应用. 一.多点触控场景分析 网络上有关Android多点触控技术的文章多见于两点拉伸 ...

  7. ThinkPHP是什么

    ThinkPHP是什么 ThinkPHP是为了简化企业级应用开发和敏捷WEB应用开发而诞生的.最早诞生于2006年初,2007年元旦正式更名为ThinkPHP,并且遵循Apache2开源协议发布.Th ...

  8. Java-MyBatis:MyBatis 3 入门

    ylbtech-Java-MyBatis:MyBatis 3 入门 1.返回顶部 1. 入门 安装 要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于 classpath ...

  9. jquery中命名冲突问题

    例如用jq代替$符号 var jq = $.noConflict()

  10. 50个极好的bootstrap 后台框架主题下载

    50个极好的bootstrap 后台框架主题下载 http://sudasuta.com/bootstrap-admin-templates.html 越来越多的设计师和前端工程师开始用bootstr ...