4.mongodb增删改操作

4.1插入语句

示例语句:

> db.customer.insert({name:"liuyong",mobile:13693686141,email:"liuyong6462158@16

3.com"})

返回结果:

> db.customer.find({})

{ "_id" : ObjectId("574160d495ec4db5bf23b96b"), "name" : "liuyong", "mobile" : 1

3693686141, "email" : "liuyong6462158@163.com" }

 

注意:

  1. 第一次插入数据时,不需要预先创建一个集合,插入数据时候会自动创建。
  2. 每次插入时候如果没有显示的指定字段_id,则会默认创建一个主键_id.主键类型为ObjectId类型,其有12个字节组成,前面4个字节表示一个时间戳,精确到秒,接着的3个字节表示机器的唯一码,接着2个字节表示的进程id,最后3个字节是一个随机的计数器。
  3. 在mongodb中,每个集合都必须有一个_id字段,不管是自动生成的还是指定的,值都必须唯一,如果插入重复值则会抛出异常。

4.2修改语句

Mongodb的修改操作总体生分为两类,一类是只针对具体的目标字段,其它不变。另一种是取代行更改,即修改具体的目标字段后,其它字段都删除。

 

语句格式:db.collection.update(query,update,<upsert>,<multi>)

Query参数为一个查询选择器,值类型为document。

Upate参数为需要修改的地方,值类型为document,如果update参数只包含字段选项,没有操作符,则会发生替代性更改。

Upsert为一个可选参数,boolen类型,默认为false。当值为true时候,update方法将更新匹配到的记录,如果找不到匹配的记录,则会插入一个新的文档到集合中。

Multi为一个可选参数,boolean类型,表示是否更新匹配到多个文档,默认为false。当为true时,update将更新所有的匹配到的文档。

 

示例:

  1. 更改指定的字段值

> db.goods.update({name:"apple"},{$set:{name:"apple5s"},$inc:{price:4000}})

解析:

这个操作更改集合中与name:apple匹配的第一个文档,将其中的字段name设置为apple5s,price增加4000,其它字段保持不变。

  1. 更改指定字段而其他字段被清除掉

> db.goods.update({name:"htm"},{name:"htc one"})

解析:这个操作将更改集合中与name:htm匹配的第一个文档,将name设置为htcone,清除掉其它字段。

  1. 更改多个文档中的指定字段

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

由于利用了可选参数multi,这个操作更改集合中与name:"surface"匹配的所有文档。

  1. update找不到匹配的文档时则插入新文档

db.goods.update({name:"iphone"},{$set:{price:9999}},{upsert:true})

由于利用了可选参数upsert,这个操作如果找不到匹配的文档,就会插入一个新的文档。

4.3删除操作

语句格式:db.collection.remove(<query>,<justone>.)

参数query为可选参数,查询选择器,类似于关系数据库中的where。

Justone参数为可选参数,是一个boolean类型,表示是否只删除匹配的第一个文档。

示例:

  1. 删除匹配的所有文档

    Db.goods.remove({name:"htm"})

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

    Db.goods.remove({name:"htm"},1)

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

    Db.goods.remove()

注意:如果remove没有指定任何参数,它将删除集合下所有的文档,但不会删除索引。如果想删除数据同时删除索引,可以使用drop方法。

4.4锁机制

Mongodb利用读写锁来支持并发操作,读锁可以共享,写锁具有排他性。当一个读锁存在时,其它操作也可以用这个读锁;但是当一个写锁存在时,其它任何读写操作都不能共享这把锁,当一个读与写等待一个锁时,Mongodb将优先分配锁给写操作。

 

 

 

 

posted @ 2016-05-22 16:32  常想一二,不思八九  阅读(160)  评论(0)    收藏  举报