这篇博文主要学习mongodb中的Document的数据更新操作。包括了数据的”插入”,”更新”和”删除”。
Document数据插入
插入一条数据到document文档中用到的命令是”db.集合名称.insert(on=bj)” ,如图:
从图中可以看出在我插入一条数据之后,再次查询发现确实添加到集合中了。
那么如果我需要批量插入数据应该怎么操作呢??我们在之前已经说过了,mongodb的客户端shell实际上就是一个JavaScript引擎。因此我们可以通过for循环来执行操作。
如上图,我通过for循环实现批量插入数据的效果。
注意:
在mongodb中的插入中还存在一个save方法,那么他和insert方法的区别在哪里呢??什么时候该用save,什么时候又该用insert呢??
在我们进行插入操作的时候,如果使用save方法的时候,遇到”_id”相同的情况下save方法完成的是保存操作,如果使用insert方法,则会出错。
Document数据删除
删除列表中的所有数据
如果我需要删除列表中的所有数据,我可以这样写:
db.students.remove({})
注意这样只是删除了数据,索引并没有删除。
根据条件删除数据:
如果需要根据条件删除集合中的数据,可以这样写:
db.students.remove({条件})
可以看到,我首先添加了两条数据,然后删除age=11的那条数据,再次重新查询发现确实被删除了。
Update操作
update方法,顾名思义,就是当我执行该方法的时候,会首先根据该方法的查询条件进行查询,如果查询到了,则执行更新操作,如果没有查询到,则执行插入操作。
语法:db.集合名称.update({查询器},{修改器},true)
注意,如果想要让update方法有这样的特性,那么必须第三个参数填写上true。
可以看到当我的第三个参数设置为true的时候,此时,当我更新一个age=33的数据,没有查找到该数据的时候,会执行插入操作。
注意:
如果我利用update方法来更新数据的时候,如果此时有多条数据满足查询器,mongodb只会默认为我们更新第一条数据。比如:
从图中可以看出:我更新name=”wangwu”的数据,发现只有第一条满足条件的数据更新了,那么如果我需要批量更新,应该怎么操作呢??
可以这样写:
db.students.update({查询条件},{$set:{更新数据}},是否insertOrUpdate,是否批量更新)
可以看到这里用到了$set修改器。如下图:
mongodb修改器
mongodb为我们提供了很多修改器,用来实现数据的修改操作,下面是我在网上找到的一张关于mongodb的修改器。
$set:用来指定一个键值对,如果存在则修改,如果不存在则进行添加操作。如下图:
根据图片,我首先为name=”xiaoming”的更新一个age=44的数据,这个时候由于该条数据没有这个age键,所以会为该条数据添加age=44的键值对, 然而当我为name=”lisi”的数据设置age=25的时候,由于该条数据已经有了age这个键,所以会更新该键值对。
$inc:用来为指定的键对应的数字类型的数值进行加减操作,如下图:
从图中,可以看出,我为name=”xiaoming”的这条数据,利用$inc修改器来将该条数据的age键的值+2,如果需要减去2,则填写-2即可。
$unset:删除指定的键,如下图:
可以看到,我们将name=”xiaoming”的这条数据的age这个键成功去掉了。
$push修改器
$push修改器:
1.如果指定的键是数组,则追加新的数值。
2.如果指定的键不是数组,则中断当前操作。
3.如果不存在指定的键,则创建数组类型的键值对。
此时我利用$push修改器分别执行两次更新操作,第一次,没有scores这个键,所以创建了一个数组类型的键值对,第二次,由于已经存在这个键,所以会继续追加。
$pushAll修改器
pushAll修改器的用法和push修改器比较相似,他是用来批量的添加数组数据,比如我需要给name=”xiaoming”的文档中添加一个fruits[apple,orange,watermalon]这样的数据,
$addToSet修改器
$pushAll:当数组中存在需要添加的值,则什么都不做,如果数组中没有需要修改的值,则进行添加操作。
可以看到,当我第一次通过$addToSet修改器,为scores数组添加值为100的数据,由于已经存在这个值,所以什么都没有做,当我第二次添加值是88的数据,此时会添加进去。
$pop修改器
$pop修改器:从指定的数组中删除一个值:1表示最后一个值,-1表示第一个值。
可以看到,当我删除fruits数组中的数据,1表示删除最后一个,-1表示删除第一个。
$pull修改器
$pull修改器:用来删除一个指定的数值
我在这里,在执行$pull修改器删除fruits中orange这个值得前后,分别执行了”db.student.find()”发现已经成功删除。
$pullAll修改器
$pullAll修改器:用来删除数组中所有的数据
ok,今天关于mongodb中document数据的操作部分,就学习到这里了。