MongoDB-简介,增删改

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_27695659/article/details/88869583

简介:mongodb 文档数据库,存储的是文档(Bson->json的二进制化).

特点:内部执行引擎为JS解释器, 把文档存储成bson结构,在查询时,转换为JS对象,并可以通过熟悉的js语法来操作.

mongo和传统型数据库相比,最大的不同:

传统型数据库: 结构化数据, 定好了表结构后,每一行的内容,必是符合表结构的,就是说–列的个数,类型都一样.
mongo文档型数据库: 表下的每篇文档,都可以有自己独特的结构(json对象都可以有自己独特的属性和值)

在传统型数据库中, 至少要4张表, 关联度非常复杂.
在文档数据库中,通过1篇文档,即可完成. 体现出文档型数据库的反范式化.

1: mongo入门命令

1.1: show dbs 查看当前的数据库

1.2 use databaseName 选库

1.2 show tables/collections 查看当前库下的collection

1.3 如何创建库?

Mongodb的库是隐式创建,你可以use 一个不存在的库
然后在该库下创建collection,即可创建库

1.4 db.createCollection(‘collectionName’)

创建collection

1.5 collection允许隐式创建

Db.collectionName.insert(document);

1.6 db.collectionName.drop() ,

删除collection

1.7 db.dropDatabase();

删除database

基本操作增删改查
增: insert
介绍: mongodb存储的是文档,. 文档是json格式的对象.

语法: db.collectionName.isnert(document);

2.1: 增加单篇文档

Db.collectionName.insert({title:’nice’});

2.2: 增加单个文档,并指定_id

Db.collectionName.insert({_id:8,age:78,name:’twiss’});

扫描二维码关注公众号,回复: 5695807 查看本文章

2.3. 增加多个文档

db.collectionName.insert(
[
{time:‘friday’,study:‘mongodb’},
{_id:9,gender:‘male’,name:‘gkate’}
]
)

删:remove
语法: db.collection.remove(查询表达式, 选项);
选项是指 {justOne:true/false},是否只删一行, 默认为false

注意
1: 查询表达式依然是个json对象
2: 查询表达式匹配的行,将被删掉.
3: 如果不写查询表达式,collections中的所有文档将被删掉.

例1: db.stu.remove({sn:’001’});
删除stu表中 sn属性值为’001’的文档

例2: db.stu.remove({gender:’m’,true});
删除stu表中gender属性为m的文档,只删除1行.

改 update操作
改谁? — 查询表达式
改成什么样? – 新值 或 赋值表达式
操作选项 ----- 可选参数

语法: db.collection.update(查询表达式,新值,选项);
例:
db.news.update({name:‘QQ’},{name:‘MSN’});
是指选中news表中,name值为QQ的文档,并把其文档值改为{name:’MSN’},
结果: 文档中的其他列也不见了,改后只有_id和name列了.
即–新文档直接替换了旧文档,而不是修改

如果是想修改文档的某列,可以用KaTeX parse error: Expected '}', got 'EOF' at end of input: ….update(query,{set:{name:’QQ’}})

修改时的赋值表达式
$set 修改某列的值
$unset 删除某个列
$rename 重命名某个列
$inc 增长某个列
$setOnInsert 当upsert为true时,并且发生了insert操作时,可以补充的字段.

Option的作用:
{upsert:true/false,multi:true/false}
Upsert—是指没有匹配的行,则直接插入该行.(和mysql中的replace一样)

例:db.stu.update({name:‘wuyong’},{$set:{name:‘junshiwuyong’}},{upsert:true});
如果有name=’wuyong’的文档,将被修改
如果没有,将添加此新文档

例:
db.news.update({_id:99},{x:123,y:234},{upsert:true});
没有_id=99的文档被修改,因此直接插入该文档

multi: 是指修改多行(即使查询表达式命中多行,默认也只改1行,如果想改多行,可以用此选项)
例:
db.news.update({age:21},{$set:{age:22}},{multi:true});
则把news中所有age=21的文档,都修改

查: find, findOne
语法: db.collection.find(查询表达式,查询的列);
Db.collections.find(表达式,{列1:1,列2:1});

例1:db.stu.find()
查询所有文档 所有内容

例2: db.stu.find({},{gendre:1})
查询所有文档,的gender属性 (_id属性默认总是查出来)

例3: db.stu.find({},{gender:1, _id:0})
查询所有文档的gender属性,且不查询_id属性

例3: db.stu.find({gender:’male’},{name:1,_id:0});
查询所有gender属性值为male的文档中的name属性

3.查询表达式:

3.1: 最简单的查询表达式

{filed:value} ,是指查询field列的值为value的文档

3.2: $ne — != 查询表达式

{field:{$nq:value}}
作用–查filed列的值 不等于 value 的文档

3.3: $nin --> not in

3.4: $all

语法: {field:{$all:[v1,v2…]}}
是指取出 field列是一个数组,且至少包含 v1,v2值

3.5: $exists

语法: {field:{$exists:1}}
作用: 查询出含有field字段的文档

3.6: $nor,

{$nor,[条件1,条件2]}
是指 所有条件都不满足的文档为真返回

3.7:用正则表达式查询 以”诺基亚”开头的商品

例:db.goods.find({goods_name:/iphone.*/},{goods_name:1});

3.8: 用$where表达式来查询

例: db.goods.find({$where:‘this.cat_id != 3 && this.cat_id != 11’});

注意: 用$where查询时, mongodb是把bson结构的二进制数据转换为json结构的对象,
然后比较对象的属性是否满足表达式.

速度较慢

Update时可用的操作符
例:
->db.user.insert({name:‘lisi’,age:12,sex:‘male’,height:123,area:‘biejing’});
->db.user.update({name:‘lisi’},{ s e t : a r e a : c h a o y a n g , set:{area:'chaoyang'}, unset:{height:1}, i n c : a g e : 1 , inc:{age:1}, rename:{sex:‘gender’}});
$setOnInsert ->相当于mysql中的列的默认值

猜你喜欢

转载自blog.csdn.net/qq_27695659/article/details/88869583