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}} 用法同pushpush一樣,只是pushAll可以一次追加多個值到一個數組字段內。
$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}} 對字段進行重命名
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章