mongoDB 入门基础 ---- update()常见操作

什么是mongDB?

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

1.创建数据库:use firstdb(这条会使用或者创建,如果没有就创建);

2.创建集合:db.createCollection("users")  //集合就相对于一个数据库下的一个table;

3.插入数据: db.users.insert({ name:"blue",age:22})  mongDB插入数据以标准的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:"play Pingpang"}}) ;            $set会给一个已经存在的数据修改一个属性,如果没有这个属性就增加这个属性和值;

现在删除hobby这个属性:

db.user.update({name:"blue"},{$unset:{ hobby:""}}) ;               $unset会把属性属性值都删掉;

假设现在有一个这样的文件数据:

{name:"bule",age:22,hobby:"play Pingpang"}

{name:"leo",age:29,hobby:"play footbool"}

{name:"lisi",age:24,hobby:"play games"}

变成这样:也就就增加一个数组和多个对象:

{name:"bule",age:22,hobby:"play Pingpang",readingBook:["one night in Beijing","春城","十面埋伏"]}

{name:"leo",age:29,hobby:"play footbool"}

{name:"lisi",age:24,hobby:"play games"}

只需:

db.user.update({name:"blue"},{$addToSet:{readingBook:"one night in Beijing"}) ;

db.user.update({name:"blue"},{$addToSet:{readingBook:"春城"}) ;

db.user.update({name:"blue"},{$addToSet:{readingBook:"十面埋伏"}) ;

或者:

db.user.update({name:"blue"},{$push:{readingBook:"one night in Beijing"}) ;

db.user.update({name:"blue"},{$push:{readingBook:"春城"}) ;

db.user.update({name:"blue"},{$push:{readingBook:"十面埋伏"}) ;

$addToSet跟$set有点类似:不同的是:前者会把一个属性认为是一个数组,不存在就push()进去,存在则不做任何操作;

$addToSet$push的相同点都是可以往属性后面追加数组;不同的是:$push可以追加多次相同的; 即可以 ["看书","看书","看书"] ;但是$addToSet连续三次操作只会是["看书"]

也可以用简单方式:

var reading_some=[one night in Beijing","春城","十面埋伏] ;

db.user.update({name:"blue"},{$addToSet:{readingBook:{$each:reading_some} }});

如果要从数组中删除一次呢?

db.user.update({name:"blue"},{$pop:{readingBook:1}) ;   1 表示从数组最后一项做一次删除操作; -1 表示从头开始删除一位 ;就算是删除完了再删也不会报错;

查看一下:

db.user.find({}) ;

变成这样:

{name:"bule",age:22,hobby:"play Pingpang",readingBook:["one night in Beijing","春城"]}

如果是吧3个人都加上同样的readingBook呢?

只需要:

db.user.update({},{$addToSet:{readingBook:{$each:reading_some} }}, {malti:true});      malti:true 表示多选:

所以到了这里我们大概明白:update一个参数实际上是一个类似选择器的东西;用了赛选符合条件的数据;

于是数据暂时变成这样:

{name:"bule",age:22,hobby:"play Pingpang",readingBook:["one night in Beijing","春城","十面埋伏"] }

{name:"leo",age:29,hobby:"play footbool",readingBook:["one night in Beijing","春城","十面埋伏"] }

{name:"lisi",age:24,hobby:"play games",readingBook:["one night in Beijing","春城","十面埋伏"] }

 

如何把bule的readingBook数组的第一项变成 one night in HongKong 呢?

db.user.update({name:"bule"},{$Set:{readingBook.1:"one night in HongKong"}});

所有的呢?

db.user.update({},{$Set:{readingBook.1:"one night in HongKong"}},{ multi :true }); 

本人做到这里也发现了一个问题:

先执行插入一条:

db.user.insert({name:"kangkang",age:8});

如果其中有一个数据没有 readingBook这个属性:那么 执行上面这条语句会出现一个奇怪的问题:

那么{name:"kangkang",age:8}  ==>>>  {name:"kangkang",age:8 , readingBook:{ "0" : "one night in HongKong"} } 

其实大概也能理解: $set只能生成一个对象值,不能生成一个数组;  所以按数组下标来修改所有数据其实是容易出错的,除非它们都是非常统一的数据;

原文地址:https://www.cnblogs.com/liuliu-hai/p/9480157.html