mongoDB⼊门基础----update()常见操作
什么是mongDB?
MongoDB 是⼀个基于分布式⽂件存储的数据库。由 C++ 语⾔编写。旨在为 WEB 应⽤提供可扩展的⾼性能数据存储解决⽅案。MongoDB 是⼀个介于关系数据库和⾮关系数据库之间的产品,是⾮关系数据库当中功能最丰富,最像关系数据库的。1.创建数据库:use firstdb(这条会使⽤或者创建,如果没有就创建);
2.创建集合:db.createCollection(\"users\") //集合就相对于⼀个数据库下的⼀个table;
3.插⼊数据: db.users.insert({ name:\"blue\插⼊数据以标准的JS对象形式插⼊;
常⽤快捷操作:
show dbs 显⽰所有数据库名;
db显⽰当前所在位置(使⽤的是哪个数据库) ;show collections 显⽰当前数据库下的集合;db.dropDatabase( ):删除当前数据库;
db.集合.remove({name:\"blue\删除 当前集合下的⼀个数据 ;db.集合.drop() ;删除当前集合;
数据库最常⽤的操作是update()操作,下⾯看看:
例如现在给users集合中的 name:\"bule\"的添加⼀个爱好属性:use firstdb
db.user.update({name:\"blue\ $set会给⼀个已经存在的数据修改⼀个属性,如果没有这个属性就增加这个属性和值;现在删除hobby这个属性:
db.user.update({name:\"blue\ $unset会把属性和属性值都删掉;
假设现在有⼀个这样的⽂件数据:
{name:\"bule\{name:\"leo\{name:\"lisi\
变成这样:也就就增加⼀个数组和多个对象:
{name:\"bule\春城\⼗⾯埋伏\"]}
{name:\"leo\
{name:\"lisi\ 只需:
db.user.update({name:\"blue\
db.user.update({name:\"blue\春城\db.user.update({name:\"blue\⼗⾯埋伏\或者:
db.user.update({name:\"blue\
db.user.update({name:\"blue\春城\
db.user.update({name:\"blue\⼗⾯埋伏\
$addToSet跟$set有点类似:不同的是:前者会把⼀个属性认为是⼀个数组,不存在就push()进去,存在则不做任何操作;
$addToSet与$push的相同点都是可以往属性后⾯追加数组;不同的是:$push可以追加多次相同的; 即可以 [\"看书\看书\看书\"] ;但是$addToSet连续三次操作只会是[\"看书\"]也可以⽤简单⽅式:
var reading_some=[one night in Beijing\春城\⼗⾯埋伏] ;
db.user.update({name:\"blue\
如果要从数组中删除⼀次呢?
db.user.update({name:\"blue\$pop:{readingBook:1}) ; 1 表⽰从数组最后⼀项做⼀次删除操作; -1 表⽰从头开始删除⼀位 ;就算是删除完了再删也不会报错;查看⼀下:db.user.find({}) ;变成这样:
{name:\"bule\春城\"]}
如果是吧3个⼈都加上同样的readingBook呢?只需要:
db.user.update({},{$addToSet:{readingBook:{$each:reading_some} }}, {malti:true}); malti:true 表⽰多选:所以到了这⾥我们⼤概明⽩:update⼀个参数实际上是⼀个类似选择器的东西;⽤了赛选符合条件的数据;
于是数据暂时变成这样:
{name:\"bule\春城\⼗⾯埋伏\"] }
{name:\"leo\春城\⼗⾯埋伏\"] }
{name:\"lisi\春城\⼗⾯埋伏\"] }
如何把bule的readingBook数组的第⼀项变成 one night in HongKong 呢?db.user.update({name:\"bule\readingBook.1:\"one night in HongKong\
所有的呢?
db.user.update({},{$Set:{readingBook.1:\"one night in HongKong\本⼈做到这⾥也发现了⼀个问题:先执⾏插⼊⼀条:
db.user.insert({name:\"kangkang\
如果其中有⼀个数据没有 readingBook这个属性:那么 执⾏上⾯这条语句会出现⼀个奇怪的问题:
那么{name:\"kangkang\
其实⼤概也能理解: $set只能⽣成⼀个对象值,不能⽣成⼀个数组; 所以按数组下标来修改所有数据其实是容易出错的,除⾮它们都是⾮常统⼀的数据;