MongoDB基础操作之增删改

y ## 前言

对于数据库的操作,无非就是增删改查,只有掌握这些基础的知识我们才能够好好掌握MongoDB,所以接下来就学习一下最基本的应用增删改的操作了,查询的内容已经在上篇文章<a href="http://www.jianshu.com/p/9a45413307b4">MongoDB查询知多少</a>发布了。

插入语句

与其它的关系型数据库一样,增加记录可以使用insert语句来完成,下面来查看一下例子。

db.users.insert({id:1,name:"peter",age:21,email:"veionestudio@outlook.com",phone:"183********"});

tips:
(1)第一次插入数据时,不需要预先创建一个集合(users),插入数据时它会自动创建这个集合。
(2)每次插入数据时如果没有显示指定的字段"_id",则会默认创建一个主键"_id"。在关系数据库中主键大多数是数值类型,而且是自动增长类型的序列。而MongoDB中的主键值类型则为ObjectId类型,这样设计好处是可以更好地支持分布式存储。其中ObjectId类型的值由12个字节组成,前面4个字节表示的是一个时间戳,精确到秒,紧接着的3个字节表示的是机器唯一标示,接着2个字节表示的进程id,最后3个字节是一个随机的计数器。
(3)在MongoDB中,每一个集合都必须有一个"_id"字段,不管是自动生成还是指定的,值都是必须唯一的,如果插入重复值将会抛出异常。下面有个小栗子。

db.users.insert({"_id":1,name:"james",phone:"12345678905"});

如果插入同样的值,将会抛出以下异常。

插入_id重复抛出异常

根据错误我们可以清楚的知道,duplicate key error collection,主键已经重复了。

修改语句

与关系型数据库类型,MongoDB修改语句由update完成,只是MongoDB和普通的关系型数据库有些不同而已。总的来说修改分为两种,一种是只针对具体的目标字段,其它不变;另一种是取代性的更改,即修改具体目标字段后,其它的字段将会被删除。其语法格式如下:
<pre>
db.cooolection.update(query,update,<upsert>,<multi>)
参数说明如下:
query参数是一个查询选择器,值类型为document。
update参数为需要修改的地方,值类型为document,如果update参数只包括字段选项,没有操作符,则会发生取代性的更改。
upsert为一个可选参数,boolean类型,默认值为false。当值为true时,update将会匹配更改内容,如果没有更新到匹配的内容,则会插入一个新的文档到集合中。
multi参数为一个可选的参数,boolean类型,当为true时,update方法将更新素有匹配到的文档。
</pre>

下面通过实例代码来更新操作:
1、更改指定的的字段值

db.user.update({name:"peter"},{$set:{name:"James"},{$inc:{age:22}});

这个操作将会匹配到name:"peter"的第一个文档,将其中的字段name设为"James",字段"age"增加22,其它字段保持不变。

2、更改指定字段其它字段被清除掉

db.user.update({name:"peter"},{"name":"James"})

这个操作将更改集合中与name:"peter"匹配的第一个文档,将其中的字段name设置为"James"后,文档中除了"_id"之外,将全部被清除掉。

3、更改多个文档中的指定字段

db.goods.update({name:"surface",,{$set:{price:6999}},{multi:true});

由于利用了可选参数multi,这个操作将更改集合中与name:"surface"匹配的所有文档,将其中的字段设为6999,其它字段不变。

4、update找不到匹配的文档时则插入新文档

db.goods.update({name:"macbook pro"},{$set:{price:12600}},{upsert:true});

因为利用了可选参数upsert,这个操作如果匹配不到文档,则会进行插入的操作。

删除语句

MongoDB中删除操作remove也是数据库CRUD操作中最基本的一种,与关系型数据库中的delete类型,语法如下:
<pre>
db.collection.remove(<query>,<justOne>);
参数说明如下:
query参数为可选参数,查询选择器,类似关系型数据库中的where条件语句。
justOne参数也是可选参数,是一个boolean值类型,表示是否只输出匹配的第一个文档,相当于关系型数据库中的limit 1条件。
有一条需要注意的是:
如果remove没有指定任何参数,它将删除集合中的所有文档,但是不会删除集合对应的索引数据。如果想删除集合中的所有文档,同时也删除集合的索引,我们可以使用MongoDB针对集合提供的drop方法。
</pre>
下面举几个栗子。

1、删除匹配的所有文档

db.goods.remove({name:"macbook pro"});

2、删除匹配的第一个文档

db.goods.remove({name:"nokia"});

3、删除所有文档,但不会删除索引

db.goods.remove();

锁机制

MongoDB与关心性数据库类似,也是通过锁机制来保证数据的完整性和一致性的。MongoDB利用读写锁来支持并发操作,读锁可以共享,写锁具有排它性。当一个读锁存在时,其它读操作也可以用这个读锁;但是当一个写锁存在时,其它任何读写操作都不能共享这把锁,当一个读和写都等待一个锁时,MongoDB将优先分配锁给写操作。

总结

通过MongoDB的学习,我们学会了基本的操作增删改的操作,insert、update、remove操作,相对于关系型数据来说语法差不多。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容