Mongodb基础入门(二)——增删改查等基础操作

Mongodb基础入门(2)——增删改查等基础操作

简介:

无论是关系数据库还是非关系数据库,其基本操作:增、删、查、改。另外由于Mongodb存储的文档本质上是Bson对象,所谓的Bson也就是Json对象的二进制对象。因此,对Mongodb数据的操作元元素也就是Json

在操作之前我们先来了解一下基本的命令:insertfindremoveupdate

首先来认识几个基本命令:

1show dbs:查看当前所有数据库

2usedatabaseName:指定要使用的数据库

3showtables/collections:查看当前数据库下的所有collection

4db.createCollection(collectionName):创建集合。因为Mongodb支持隐式创建数据库和集合,因此该命令不常用。

5db.dropDatabase():删除当前使用的数据库

6db.collectionName.drop();删除名字为collection的集合。

 

增(insert

首先建立一个局部变量(test),此变量是个Json对象,然后通过insert函数插入数据。

命令格式:数据库.集合.insert()

> test={"title":"liuddssd0000dong","content":"hahhhhhhhhhh","date":newDate()}

{
        "title" : "liuddssd0000dong",
        "content" :"hahhhhhhhhhh",
        "date" :ISODate("2014-12-15T06:28:53.604Z")
}
db.doc.insert(test)

或者直接:db.doc.insert({title:"test",content:"hello world",data:newDate()})

注意:此命令执行时,如果doc集合不存在,则会自动创建。

Mongodb基础入门(二)——增删改查等基础操作

 

当然也可以一次增加多个文档,如下:

Mongodb基础入门(二)——增删改查等基础操作

 

查(find

命令格式:数据库.集合.find(查询表达式,结果显示的列);

无条件查询:

db.doc.find()

条件查询_id属性总是默认查出来):

db.doc.find({"content":"hahhhhhhhhhh"})

(注意:_id是记录的逐渐,默认的是ObjectId类型,类似的还有_class,作为类路径名)

Mongodb基础入门(二)——增删改查等基础操作

 

指定结果中显示name列:

>db.doc.find({title:"test4",name:"god"},{name:1})

Mongodb基础入门(二)——增删改查等基础操作

指定查询结果中不显示_id列:

>db.doc.find({name:"god"},{_id:0,title:1})

Mongodb基础入门(二)——增删改查等基础操作

 

高级查询:

查询表达式中可以使用多种运算符来增强查询功能。

比较运算符:

名称

介绍

$gt

$gte

>=

$lt

$lte

<=

$ne

!=

$in

mysql中的in一致

$nin

not in

$all

满足数组中所有条件

1{field:{$ne:value}}field列的值不等于value

2{field:{$all:[value1,value2…]}指取出的field列是一个数组,并且至少包含value1value2.

3{field:{$gt:value}}指返回field列的值大于value的文档。

4{field:{$gt:value1$lt:value2}}返回field列大于value1,小于value2的文档。

  

 

逻辑运算符:

名称

介绍

$or

or

$and

and

$not

not

$nor

数组中所有条件都不满足为真

1{$nor:[条件1,条件2…]}指当条件1和条件2都不满足的文档才返回。

 

元素运算符:

名称

介绍

$exists

某列存在时为真

$mod

满足其求余条件为真

$type

数据为某类型则为真

1{field:{$exists:1}}查询出包含field字段的文档。

 

 

Js运算符:

名称

介绍

$where

Js表达式为真则为真

$reges

正则表达式匹配成功时则为真

$inc

某列增长

$rename

重命名某列

$setOnInsert

upsert时,设置字段的值

$set

设置某字段新值

$unset

删除指定的列

注意:$where在查询时,Mongodb先将bson结构的二进制数据转换为json结构对象,在依次比较对象的属性是否满足表达式,速度较慢。

1> db.doc.find({$where:"this.title='test4'"})

Mongodb基础入门(二)——增删改查等基础操作

2> db.doc.find({name:/go.*/})

Mongodb基础入门(二)——增删改查等基础操作

 

分页查询:

limit(数字):查询指定数量的记录。

>db.doc.find().limit(2)

Mongodb基础入门(二)——增删改查等基础操作

 

skip(数字):跳过指定数量的数据。

>db.doc.find().skip(1)

Mongodb基础入门(二)——增删改查等基础操作

注意:这limit()skip()可以连用。

 

改(update

命令格式:数据库.集合.update(查询表达式,赋值表达式,参数);

参数:{upsert:true/false,multi:true/false}.upsert指在修改时若不存在匹配的列,则允许直接插入改行。multi则是指是否运行修改多行,true:修改多行,false:修改一行。默认为false

在这里我们通常以为db.doc.update({title:"test"},{title:"have replace"})。执行后的输出结构应该为:

{ "_id" :ObjectId("549e220245ed24b93c5fce7f"), "title" : "havereplace", "content" : "hello world", "data": ISODate("2014-12-27T03:05:38.315Z") }

但是当我们执行完毕后却发现结果变为:{"_id" : ObjectId("549e211645ed24b93c5fce7e"),"title" : "have replace" }。也就是说update时,除了主键不能修改,其余内容全被第二个参数的内容替换。如下图所示:

Mongodb基础入门(二)——增删改查等基础操作

 

如果想要修改文档某列的值,而不是直接替换,可以使用$set关键字:

> db.doc.update({title:"test4",name:"ldd"},{$set:{name:"god"}})

Mongodb基础入门(二)——增删改查等基础操作

除了$set之外,修改时可用的关键字还有如下:

$unset :删除某列

$rename :重命名某列

$inc :增长某列

$setOnInsert :upserttrue时,并且发生了insert操作,可以补充的字段。

 

删(remove

remove函数既可以删除整个表的记录,也可是删除符合条件的记录。不加条件时就是全部删除记录。命令格式:数据库.集合.remove(选项表达式,参数);

参数:{justOne:true/false},true:只删除一行,false:全部删除。默认为false

全部删除:

db.test.remove({})

条件删除:

db.test.remove({"title":"test1"})
Mongodb基础入门(二)——增删改查等基础操作

 

  

指定参数删除:

>db.doc.remove({title:"test3"},{justOne:true})

Mongodb基础入门(二)——增删改查等基础操作

注意:查询表达式为Json对象。满足查询表达式的行将被删掉。