mongodb 基本操作 CRUD

mongodb 基本操作 CRUD


一,mongodb 基本操作
创建数据库

语法: use databaseName  ,如果有该数据库就切换到该数据库。没有则创建该数据库
例子: use  runoob   , runoob 如果有这个数据库就切换到这个数据库,没有则创建
输出 > switched to db runoob
这个创建数据库时直接使用  show dbs (查看数据库)是看不到的,需要插入一些数据才会看见

删除数据库

删除数据库时需要先切换到需要删除的数据库例:
> use runoob						-切换到需要删除的数据库
switched to db runoob				-输出信息
> db.dropDatabase()					-删除数据库,db表示当前数据库,类似 this
{ "dropped" : "runoob", "ok" : 1 }	-输出信息

创建集合,删除集合

在 mongodb 中不需要手动创建集合 ,在插入数据时mongodb会自动创建
> db.createCollection("student")	-创建集合(不建议)
{ "ok" : 1 }						-输出信息

删除集合
> db.student.drop()					-删除student 集合
> true 								-输出信息

查看数据库 and 集合

查看 数据库
> show dbs							-也可以写  show databases  效果一样
admin   0.000GB
config  0.000GB
local   0.000GB
test    0.000GB

查看集合
> show collections					-查看集合也支持  show tables (关系型数据库的)
student
user

insert(添加)

语法:db.<collection>.insert(document)
// db:当前数据库   emp:集合(如果有该集合就先集合中插入一条文档,否则创建该集合) insert:插入语句
db.emp.insert({								-插入一个文档	
		name : '小黑'
		,sex : '男'
		,age : '20'
});
db.emp.insert([								-插入多个文档
	{
		name : '小白'
		,sex : '女'
		,age : '19'
	}
	,{
		name : '小绿'
		,sex : '女'
		,age : '21'
	}
]);

// mongodb 3.2添加了 insertOne(添加一个文档) 和 insertMany(添加多个文档)方法,使代码更加语义化
db.emp.insertOne({								-插入一个文档	
		name : '小黑'
		,sex : '男'
		,age : '20'
});
db.emp.insertMany([								-插入多个文档
	{
		name : '小白'
		,sex : '女'
		,age : '19'
	}
	,{
		name : '小绿'
		,sex : '女'
		,age : '21'
	}
]);
PS:添加时每个文档会自动添加一个 "_id"  来确保每个文档的唯一性,当然我们也可以手动添加
例:
	{
		_id  : 'hello'
		,name : '小绿'
		,sex : '女'
		,age : '21'
	}
手动添加的话也要确保每个id是唯一的

remove(删除)

语法:
db.collection.remove(
   <query>,                   					- 删除条件
   {		
     justOne: <boolean>,						- 是否删除只匹配到的第一个文档,默认false
     writeConcern: <document> 					- 抛出异常级别
   }
)
例子:
删除全部
db.emp.remove({}); 								-() 里面不能不写 {} 一般也不会删全部(直接删集合不就好了嘛)
// 按照id删除一个文档
db.emp.remove('5ef9d5aece2f5819e31de72e');		-'5ef9d5aece2f5819e31de72e' 默认按照id删除
// 按照名字删除
db.emp.remove({name : '狗子'});

update(修改)

语法:
db.<collection>.update(
	<query>,									 - 更新条件 类似于sql的while
	<update>,									 - 更新内容
	{
		[upsert]:false, 						  - 如果数据没有是否插入,默认false 
		[multi]:false,						   	  - 是否更新按条件查询出来的所有数据,默认为false(只更新找到的第一条)
		[writeConcern]  						  - 抛出异常的级别
	})
例子:
// 按照id更新一条数据
db.emp.update({
		_id : ObjectId('5efaa5b887b4fd0ad4001662')
	},{
		sex : '公'
	});
上面这种更新会直接使用 {sec : '公'} 把之前的给替换掉
也就是说我之前的文档是
{
	name : '小绿'
	,sex : '女'
	,age : '21'
}
会直接换成  {sec : '公'}  之前的 name 和 age 都会不见,如果想只更换里面的一个的话需要这样使用
db.emp.update(
			{
				name : '小xx'
			},
			{
				$set:{
					age:'20'
				}
			}
	);
上面的会查找 到 name为 小xx 的文档,把里面的age换成 20
$set 为数据操作符,在最下方有一个表

find(查询)

// db.<collection>.find([条件(json)])
// 查询 emp 集合中所有文档   返回一个数组
db.emp.find({name : '小xx'});  

// 查询emp集合中的所有文档
db.emp.find();

// 根据id查询 
db.emp.find('5efaa5b887b4fd0ad4001662');


// 根据 性别 and 年龄查询
db.emp.find({sex : '男' , age : '20'});
// PS 存入时与查询时的数据类型要一致 age我之前存入的是string类型,条件直接这样 age : 20 是查询不到的

// 模糊查询  可以使用 正则表达式
db.emp.find({name : /小+[\S]{1}/});
db.emp.find({name : /小\S/});
// 查询集合中有多少条数据  返回 int -
db.emp.find().count();

// 在上面我们说 find 返回的是数组那么就应该有length
db.emp.find().length();

// 如果查询出来的数据绝不查看不方便 那么可以使用pretty()方法格式化数据
db.emp.find().pretty();


数据操作符

名称用法说明
$inc{$inc:{field:value}}对一个数字字段的某个field增加value(说白了就递增多少)
$set{$set:{field:value}}把文档中某个字段field的值设为value
$unset{$unset:{field:1}}删除某个字段field
$push{$push:{field:value}}把value追加到field里。注:field只能是数组类型,如果field不存在,会自动插入一个数组类型
$pushAll{$pushAll:{field:value_array}}用法同 p u s h 一 样 , 只 是 push一样,只是 pushpushAll可以一次追加多个值到一个数组字段内。
$pullAll{$pullAll:value_array}用法同$pull一样,可以一次性删除数组内的多个值。
$addToSet{$addToSet:{field:value}}加一个值到数组内,而且只有当这个值在数组中不存在时才增加。
$pop删除数组内第一个值:{KaTeX parse error: Expected 'EOF', got '}' at position 15: pop:{field:-1}}̲、删除数组内最后一个值:{pop:{field:1}}用于删除数组内的一个值
$pull{$pull:{field:_value}}从数组field内删除一个等于_value的值
$rename{$rename:{old_field_name:new_field_name}}对字段进行重命名
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值