简介

一.Document数据插入

二.Document数据删除

三.Document数据更新

 

一.Document数据插入

1.插入文档

文档名].insert({BSON数据})

2.批量插入文档

shell当中不支持批量插入,想完成批量插入操作,可以使用shell的for循环,或者其他高级语言当中的批量操作方法

例:使用for循环插入10个学生,在学生集合当中

document优势 mongodb mongodb的document_批量插入

我使用的是2.6的版本,发现已经支持了批量插入操作。

详见:


3.Save操作

save操作和insert操作的区别在于,save在遇到_id相同的插入数据时候,会覆盖原来的,而insert会提示错误

例子:

用insert的方法去插入一个_id相同的数据

document优势 mongodb mongodb的document_数据_02

 

 

二.Document数据删除

1.删除列表中所有数据

文档名].remove({}) 集合的本身和索引不会别删除

例子:删除列表中所有数据

document优势 mongodb mongodb的document_document优势 mongodb_03

2.根据条件删除

例: 删除_id为10的那条记录    

document优势 mongodb mongodb的document_数组_04

 

三.Document数据更新

1.直接覆盖更新

db.[文档名].update({查询器},{修改器})

{查询器}就相当于是条件

{修改器}就是你要直接覆盖替换的BSON数据

例:更新_id为9,那个学生,把Name变成age

document优势 mongodb mongodb的document_批量插入_05

 

 

注意:当主键冲突的时候会报错并且停止更新操作

例:我用_id为8的数据,去替换_id为9的记录,因为_id为8的数据已经存在,不允许有两个主键为_id:8

的记录,所以会报错。

document优势 mongodb mongodb的document_document优势 mongodb_06

 

2.采用insertOrUpdate的做法进行更新

db.[文档名].update({查询器},{修改器},true)

后面第三个参数为true,就代表是当记录不存在的时候,就插入一条记录,如果存在就更新

例:更新一个_id为10的数据,没有就插入,有就更新

document优势 mongodb mongodb的document_批量插入_07

 

3.批量更新操作

db.[文档名].update({查询器},{修改器},false, true)

※默认情况当查询器查询出多条数据的时候默认就修改第一条数据       

先修改一下数据如下:

让_id为9和10的数据,有相同的内容

 

document优势 mongodb mongodb的document_document优势 mongodb_08

再插入一个_id=11,age=20的数据

 

document优势 mongodb mongodb的document_批量插入_09

 第四个参数不写的情况下去更新:

age=20的数据

 

document优势 mongodb mongodb的document_document优势 mongodb_10

第四个参数添加并且为true的时候,我们预期是10和11都能被修正

$操作的时候使用

 

document优势 mongodb mongodb的document_批量插入_11

 修正插入语句

这里注意$set后面要有":",而且它和它后面的修改器要被{}包起来,因为我第一次使用mongoDB,所以总写错。

 

document优势 mongodb mongodb的document_批量插入_12

4.使用修改器来完成局部更新操作 

$set 它用来指定一个键值对,如果存在键就进行修改不存在则进行添加

{$set:{field:value}}

_id为10的数据,没有Name属性,进行了添加,有age键,就进行了修改

document优势 mongodb mongodb的document_数据_13

$inc

1.适用于数字类型

2.能够对键对应的数字类型数值进行加减操作

{$inc:{field:value}}

给age=30的数据增加2岁,由于没有使用批量更新参数,所以默认修正了第一条

document优势 mongodb mongodb的document_数组_14

 $unset 删除指定的键

{$unset:{field:1}}

我在例子里面先是删除了age=30的数据的age属性,但是有一点不明白,unset后面那个field:1是什么,于是我查了一下,说是后面是什么都无所谓,unset只看键不看value,于是又做了第二个例子

document优势 mongodb mongodb的document_批量插入_15

 $push

1.如果指定的键是数组增追加新的数值

2.如果指定的键不是数组则中断当前操作,报错

3.如果不存在指定的键则创建数组类型的键值对

{$push:{field:value}}

document优势 mongodb mongodb的document_数据_16

$pushAll

用法同上,是批量添加数组数据的操作

{$pushAll:{field:array}}

1.第一个操作没有用$pushAll,所以把["C#","JAVA"]当成一个数组项目处理了

2.第二个操作使用了$pushAll,所以当成了两项来处理的。

document优势 mongodb mongodb的document_批量插入_17

$addToSet

往数组中添加项目,存在就不添加,不存在就添加(push不管存不存在都添加)

{$addToSet:{field:value}}

1.先用push插入,发现更新完成后有两个“C#”

2.再用addToSet更新,发现没有增加项目

document优势 mongodb mongodb的document_数组_18

$pop

从指定数组删除一个值1删除最后一个数值,-1删除第一个数值

{$pop:{field:value}}

1.删除最后一个索引位置的数据,后面的value用"1"

2.删除第一位置索引的数据,value=-1

document优势 mongodb mongodb的document_document优势 mongodb_19

$pull push的逆向操作,删除键是数组的项目中的指定元素

{$pull:{field:value}}

document优势 mongodb mongodb的document_批量插入_20

 $pullAll  批量删除数组中的指定元素

{$pullAll:{field:array}}

document优势 mongodb mongodb的document_数据_21

数组定位器,如果数组有多个数值我们只想对其中一部分进行操作我们就要用到定位器($)

 {$push:{field:value}}

1.实例第一个是在刚刚清空的数组里面添加了两个元素

2.我想在{“SubID”:1,"SubName":"MangoDB"}这个对象里面再添加"Teacher":"Lucy"

document优势 mongodb mongodb的document_数组_22

document优势 mongodb mongodb的document_数据_23

5.$addToSet与$each结合完成批量数组更新

理解:首先从上面的例子中我们知道,addToSet这个修改器,可以判断是否项目存在,不存在的时候就直接插入。

此时我有一个功能,例如我想往一个存在数据的数组中批量更新数据,如果存在就不更新。那么只使用addToSet是不能进行批量的,于是就要结合$each来实现。

例:

1.新创建一个文件,并使用pushAll修改器添加数据:

document优势 mongodb mongodb的document_批量插入_24

2.我想要批量插入"C#","PHP","JavaScript","JAVA",要求不能有重复的

如果这时候我直接用pushAll来进行更新的话,"C#"和"JAVA"就会有重复

在shell当中输入如下命令:

> db.Student.update({_id:10000},{$addToSet:{Books:{$each:["C#","PHP","Javascript","JAVA"]}}})

document优势 mongodb mongodb的document_数据_25

  

总结:以上就是MongoDB的Document的插入、删除以及更新的使用。