mongodb基本操作

我爱海鲸 2023-07-12 14:42:51 暂无标签

简介curd

1、安装请查看上一篇文章:mongodb安装

2、MongoDB基本操作

类比:

  • 生活中:仓库、架子、物品

  • 计算机:数据库(database)、集合(collection)、数据/文档(document)

查看数据库

语法:show databases

效果

选择数据库

语法:use 数据库名

效果

隐式创建:在mongodb选择不存在的数据库不会报错,后期当该数据库有数据时。系统自动创建。

查看集合

语法:show collections

效果

创建集

语法:db.createCollection('集合名')

效果

删除集合

语法:db.集合名.drop()

效果

如何删除数据库?

1通过use语法选中数据库,2通过db.dropDatabase()删除数据库

总结:

数据库(查看、创建、选择、删除

查看:show databases
创建:有单独的语法,但是忽略  隐式创建
选择:use 数据库名
删除:1通过use选中数据库,2通过db.dropDatabase()删除数据库

集合(查看、创建、删除

查看:show collections
创建:db.createCollection('集合名')      多学一招:忽略  后期插入数据 隐式创建集合
删除:db.集合名.drop()

3、MongoDB文档增删修查(CURD)

C增:

语法:db.集合名.insert(JSON数据)

说明:集合存在-则直接插入数据,集合不存在-隐式创建

练习:在test2数据库的c1集合中插入数据(姓名叫haijin年龄18岁)

use test2
db.haijin1.insert({uname:"haijin", age:18})

1:数据库和集合不存在都隐式创建
2:对象的键统一不加引号方便看,但是查看集合数据时系统会自动加
3:mongodb会给每条数据增加一个全球唯一的_id键 

_id的组成

是否可以自定义_id值?

可以,只需要给插入的JSON数据增加_id键即可覆盖(但不推荐

db.c1.insert({_id:1, uname:"webopenfather", age:18})

如何一次性插入多条记录?

传递数据,数组中写一个个JSON数据即可

db.haijin1.insert([
    {uname:"z3", age:3},
    {uname:"z4", age:4},
    {uname:"w5", age:5}
])

含义:一次性插入3条数据到haijin1集合

如何快速插入10条数据

mongodb底层使用JS引擎实现的,所以支持部分js语法

因此可以写for循环

for (var i=1; i<=10; i++) {
    print(i)
}

需求:在test2数据库haijin2集合中插入10条数据,分别为 a1 a2 ... a10
use test2
for (var i=1; i<=10; i++) {
    db.haijin2.insert({uanme: "a"+i, age: i})
}

R查

基础语法:db.集合名.find(条件 [,查询的列])

条件
	查询所有数据  		 {}或者不写
	查询age=6的数据		  {age:6}
    既要age=6又要性别=男    {age:6,sex:'男'}
    
查询的列(可选参数
	不写 - 这查询全部列(字段
	{age:1}  只显示age列(字段
	{age:0}  除了age列(字段都显示
	留心:不管你怎么写系统自定义的_id都会在

升级语法

db.集合名.find({键:值})   注:值不直接写
				 {运算符:值}
db.集合名.find({
	键:{运算符:值}
}) 
运算符 作用
$gt 大于
$gte 大于等于
$lt 小于
$lte 小于等于
$ne 不等于
$in in
$nin not in

 

查询所有数据

查询所有数据

db.haijin1.find()

只看uname列

 db.haijin1.find({},{uname:1})

除了uname都不看

 db.haijin1.find({},{uname:0})

查询年龄大于5岁的数据?

db.haijin2.find({age:{$gt:5}})

查询年龄是5岁、8岁、10岁的数据?

db.haijin2.find({age:{$in:[5,8,10]}})

只看年龄列,或者年龄以外的列(_id别管它)?

只看年龄列: db.haijin2.find({},{age:1})

只看除了年龄列: db.haijin2.find({},{age:0})

U改

基础语法: db.集合名.update(条件, 新数据 [,是否新增,是否修改多条])

是否新增:指条件匹配不到数据则插入(true是插入,false否不插入默认)
是否修改多条:指将匹配成功的数据都修改(true是,false否默认)

升级语法

说明:

是否新增:指匹配不到数据则插入(true-是插入,false-否不插入默认)

是否修改多条:将匹配成功的数据都修改(true-是,false-否默认)

db.集合名.update(条件, 新数据)
					  {修改器: {键:值}}
修改器 作用
$inc 递增
$rename 重命名列
$set 修改列值
$unset 删除列

准备工作

use haijin_db;
for(var i = 1; i<= 10; i++){
	db.haijin_c.insert( {"uname":"zs"+i,"age":i} );
}

将{uname:"zs1"}改为{uname:"zs2"}

db.haijin_c.update({uname:"zs1"}, {uname:"zs2"})

发现:默认不是修改,而是替换

解决:使用升级语法 修改器

需求:使用修改器将zs4的姓名改为zs44

语法:db.haijin_c.update({uname:"zs4"}, {$set: {uname: "zs44"}})

给{uname:"zs10"}的年龄加2岁或者减2岁

db.haijin_c.update({uname:"zs10"}, {$inc: {age: 2}})

db.haijin_c.update({uname:"zs10"}, {$inc: {age: -2}})

综合练习

插入数据:db.haijin_c4.insert( {uname:"神龙教主",age:888,who:"男",other:"非国人"});

完成需求: uname 改成 niubi(修改器:$set) age 增加 111 (修改器:$inc) who 改字段 sex (修改器:$rename) other 删除 (修改器:$unset)

验证语法最后两个参数(了解)

【验证】是否新增true是false否:修改uame 等于 zs30的年龄 30岁 

db.haijin_c4.update({uname:"zs10"}, {$set: {age: -2}},true) 设置为true,表示如果没有这个数据则进行新增,false表示没有就不管了(默认为false)

D删

语法:db.集合名.remove(条件 [, 是否删除一条] )

注意:是否删除一条 true是,false否 默认

db.haijin_c4.remove({},true)

db.haijin_c4.remove({})

总结

增Create

db.集合名.insert(JSON数据)

删Delete

db.集合名.remove(条件 [,是否删除一条true是false否默认])

也就是默认删除多条

改Update

db.集合名.update(条件, 新数据  [,是否新增,是否修改多条])

升级语法db.集合名.update(条件,{修改器:{键:值}})

查Read

db.集合名.find(条件 [,查询的列])

你好:我的2025