简介:

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

在操作之前我们先来了解一下基本的命令:insert、find、remove、update

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

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

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

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

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

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

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

 

增(insert)

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

命令格式:db.collectionName.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集合不存在,则会自动创建。

java 查询mongodb详细 mongodb查询json对象的属性_增

 

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

java 查询mongodb详细 mongodb查询json对象的属性_增_02

 

查(find)

命令格式:db.collectionName.find(查询表达式,结果显示的列);

无条件查询:
> db.doc.find()
条件查询(_id属性总是默认查出来):
> db.doc.find({"content":"hahhhhhhhhhh"})

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

java 查询mongodb详细 mongodb查询json对象的属性_java 查询mongodb详细_03

 

指定结果中显示name列:

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

java 查询mongodb详细 mongodb查询json对象的属性_删_04

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

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

java 查询mongodb详细 mongodb查询json对象的属性_改_05

 

高级查询:

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

比较运算符:

名称

介绍

$gt

$gte

>=

$lt

$lte

<=

$ne

!=

$in

和mysql中的in一致

$nin

not in

$all

满足数组中所有条件

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

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

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'"})

java 查询mongodb详细 mongodb查询json对象的属性_java 查询mongodb详细_06

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

java 查询mongodb详细 mongodb查询json对象的属性_增_07


分页查询:

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

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

java 查询mongodb详细 mongodb查询json对象的属性_改_08

 

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

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

java 查询mongodb详细 mongodb查询json对象的属性_java 查询mongodb详细_09

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

 

改(update)

命令格式:db.collectionName.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时,除了主键不能修改,其余内容全被第二个参数的内容替换。如下图所示:

java 查询mongodb详细 mongodb查询json对象的属性_查_10

 

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

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

java 查询mongodb详细 mongodb查询json对象的属性_java 查询mongodb详细_11

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

$unset:删除某列

$rename :重命名某列

$inc :增长某列

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

 

删(remove)

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

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

全部删除:

> db.test.remove({})

条件删除:

> db.test.remove({"title":"test1"})

java 查询mongodb详细 mongodb查询json对象的属性_增_12

 

  

指定参数删除:

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

java 查询mongodb详细 mongodb查询json对象的属性_java 查询mongodb详细_13

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