MongoDB介紹以及安裝和CRUD操作實例

MongoDB介紹以及安裝和CRUD操作實例

一、基本信息

數據庫主要分成兩種:
一、關係型數據庫(RDBMS)
·MySQL、Oracle、DB2、SQL Server……
·關係數據庫中全都是表
二、非關係型數據庫
·MongoDB、Redis……
·鍵值對數據庫
·文檔數據庫MongoDB

MongoDB的數據模型是面向文檔的,所謂文檔是一種類似於JSON的結構,簡單理解MongoDB這個數據庫中存的是各種各樣的JSON。(BSON—二進制的 JSON)

1.數據庫(database)
數據庫是一個倉庫,在倉庫中可以存放集合
2.集合(collection)
集合類似於數組,在集合中可以存放文檔
3.文檔(document)
文檔數據庫中的最小單位,我們存儲和操作的內容都是文檔。

·MongoDB安裝包下載地址:

·MongoDB的版本偶數版本爲穩定版,奇數版本爲開發版。
·MongoDB對於32位系統支持不佳,所3.2版本以後沒有再對32位系統的支持。

一、安裝MongoDB

二、配置環境變量

​ 1.找到安裝目錄 D:\software\MongoDB\Server\3.6\bin

2.添加環境變量

3.檢查安裝成功沒有

在c盤 根目錄下創建一個 文件夾 data 再在data下面創建一個文件夾db

4.啓動 MongoDB 服務器 (數據庫的服務器,用來存儲數據的)

​ 啓動方法一:打開cmd 命令窗口,輸入 mongod 啓動 mongodb 服務器

​ 啓動方法二:若想要自定義數據存儲位置 和 MongoDB 服務器使用的 端口號

​ 則啓動時候可以輸入 mongod --dpath D:\data\db --port 123

5.連接MongoDB服務器(數據庫的客戶端,用來操作數據)

​ 第4步的窗口不要關閉,再打開一個 cmd 命令窗口,輸入 mongo 結尾處出現 “ > ” 則表示連接成功

將MongoDB設置爲系統服務,可以自動在後臺啓動,不需要每次都手動重啓

二、設置在後臺啓動MongoDB

1.在 D 盤根目錄下創建 文件夾

cd D:\
mkdir D:\data\db
mkdir D:\data\log

2.在安裝目錄下面創建配置文件

D:\software\MongoDB\Server\3.6\mongod.cfg

3.在配置文件中添加內容,寫 日誌路徑 和 數據存儲路徑

systemLog:
  destination: "file"
  path: "c:\\data\\log\\mongod.log"
storage:
  dbPath: "c:\\data\\db"

4.以管理員方式打開cmd ,執行以下命令

sc.exe create MongoDB binPath= "\"D:\software\MongoDB\Server\3.6\bin\mongod.exe\" --service --config=\"D:\software\MongoDB\Server\3.6\mongod.cfg\"" DisplayName= "MongoDB" start= auto

5.啓動MongoDB 服務,打開 任務管理器 ,找到 MongoDB 服務 右鍵啓動

6.如果啓動失敗,證明上邊的操作有誤,在控制檯輸入 sc delete MongoDB 刪除之前配置的服務然後從第一步再來一次

三、MongoDB 基本命令

查看幾個數據

show dbs

進入數據庫

use 數據庫名

查看當前所在數據庫

db

查看數據庫中有幾個集合

show collections

**注意:**在MongoDB中不需要手動創建 數據庫集合,當我們在創建文檔時,如果文檔所在的集合或數據庫不存在 則 自動創建數據庫 和 集合

數據庫的CRUD的操作 官網文檔https://docs.mongodb.com/v3.6/crud/

操作語法文檔下載路徑: MongoDB語法操作文檔

  • 向數據庫中插入文檔 db 代表當前數據庫

    db.集合名.insertOne(doc)
    

    例:

    db.inventory.insertOne(
       { item: "canvas", qty: 100, tags: ["cotton"], size: { h: 28, w: 35.5, uom: "cm" } }
    )
    
    /*
        插入數據
    */
    db.inventory.insert([
        {name:"測試",age:18,sex:0,hobby:"籃球",test:true},
        {name:"測試2",age:19,sex:1,hobby:"籃球2",test:false},
        {name:"測試3",age:20,sex:0,hobby:"籃球3",test:true}
    ]);
    
    /* 查詢 */
    db.inventory.find({});
    
    /* 調用此方法可以生成id */
    ObjectId();
    
    /* 可以自定義id */
    db.inventory.insert(
        {_id:"helloworld",name:"測試",age:18,sex:0,hobby:"籃球",test:true}
     )
    
    # 插入的方法
    db.collection.insertOne()	插入 一個 文檔到 一個集合
    db.collection.insertMany()	插入 多個 文檔到 一個集合
    db.collection.insert()	    插入 一個 或 多個 文檔到 一個集合
    
  • 查詢數據

    /*
        查詢 在find 裏面輸入查詢條件
        find()     返回的是一個數組
        findOne()  返回的是一個對象
    */
    db.inventory.find({});
    
    /* 取返回數組的第一個對象 */
    db.inventory.find({age:18})[0];
    
    db.inventory.find({age:18})[0].name;
    
    /* 多條件查詢 */
    db.inventory.find({age:18,_id:"helloworld"});
    
    /* findOne 返回的是一個對象 */
    db.inventory.findOne({age:18}).name;
    
    /* .count() 是統計數目 */
    db.inventory.find({age:18}).count();
    
  • 修改操作

    /*
        修改
         db.collection.update(查詢條件,新對象)
           update() 默認情況下會使用新對象來替換舊的對象, update()  默認情況只會修改一個
           如果需要修改指定的屬性 $set:{}
           $unset:{}  可以用來刪除文檔的指定屬性
    */
    db.inventory.find();
    
    /* - update() 默認情況下會使用新對象來替換舊的對象 */
    db.inventory.update({_id:"helloworld"},{age:20});
    
    /* 如果需要修改指定的屬性 $set:{} */
    db.inventory.update(
        {_id:"helloworld"},
        {$set:{
            age:21,
            name:"姓名"
        }}
    );
    
    /* $unset:{}  可以用來刪除文檔的指定屬性 */
    db.inventory.update(
        {_id:"helloworld"},
        {$unset:{
            hobby:"123"
        }}
    );
    
    /* updateMany 可以修改多個 */
    db.inventory.updateMany(
        {age:18},
        {$set:{
            hobby:"123"
        }}
    );
    
    /* update 加上 multi屬性後可以修改多個 */
    db.inventory.update(
        {age:18},
        {$set:{
            hobby:"234"
        }},
        {
            multi:true
        }
    );
    
  • 刪除數據

    /*
    	db.collection.remove()
    	db.collection.deleteOne()
    	db.collection.deleteMany()
    */
    /* 默認情況會刪除符合條件的多個 */
    db.inventory.remove({age:18});
    
    /* 若果用remove刪除一個 後面加一個boolean值是否刪除一個 則 */
    db.inventory.remove({age:18}, true);
    
    /* 刪除 集合 */
    db.inventory.drop();
    
    /* 刪除當前數據庫 */
    db.dropDatabase();
    
    

    部分高級查詢:

    //13.查尊喜歡電影hero的文檔
    //MongoDB支直接通過內獲文檔的屬性進行查詢,如果要查詢內鼓文檔則可以通過。的形式來匹配
    //如果要通過內蒙文檔來對文檔進行查詢,此時屬性名必須使用引號db.users.find({'hobby.movies'"hero"});
    
    //14.向tangsengp添加一個新的電影Interstellar
    //$push 用於向數組中添加一個薪的元素
    //$addToSet 用於向數組中添加一個薪的元素,但是不會重複,若存在重複的則 不會再添加
    db.users.update({username:"tangseng"}{$push:{"hobby.movies""Interstellar"}});
    
    db.users.update({username:"tangseng"}{$addToSet:{"hobby.movies""Interstellar"}});
    
    
    //17.向numbers中插入20000條數
    for(var i=l;i<=20000;i++){
          db.numbers.insert({num:i}};
    
    
    var arr = [];
    for (var i=1 ; i <= 20000 ; i++) {
    	arr.push({num:i});
    }
    db.numbers.insert(arr);
    
    
    //21.查尊numbers中 numt於40小於50的文檔
    db.numbers.find({num:{$gt:40,$1t:50}};
    
    // limit() 設置顯示數據的上限
    // 查看前 10 條
    db.numbers.find().limit(10);
    
    // 查看第 11 到 20
    // skip( (頁碼 -1)* 每頁顯示條數) ).limit(每頁顯示條數)
    db.numbers.find().skip(10).limit(10);
    
    

部分高級練習:

/* 27.查詢工資小於2000的員工 */
db.emp.find({sal:{$lt:2000}});

/* 28.查詢工資在1000-2000之間的員工 */
db.emp.find({sal:{$gt:1000,$lt:2000}});

/* 29.查詢工資小於1000或大於2500的員工 lt 小於  gt 大於 */
db.emp.find({$or:[{sal:{$lt:1000}},{sal:{$gt:2500}}]});

/* 30.查詢財務部的所有員工 */
var deptno = db.dept.findOne({dname:"財務部"}).deptno;
db.emp.find({depno:deptno});

/* 32.查詢所有mgr爲7698的所有員工 */
db.emp.find({mgr:7698});

/* 多條件查詢 */
db.emp.find({mgr:7698,empno:7499});

/* 33.爲所有薪資低於1000的員工增加工資400元 inc 自增*/
db.emp.updateMany({sal:{$lte:1000}},{$inc:{sal:400}});

/* sort() 可以用來指定文檔的排序規則,sort() 需要傳遞一個對象來指定排序規則 */
/*  1表示升序 -1表示降序 */
db.emp.find({}).sort({sal:1,empno:-1});

// limit skip sort 可以任意的順序進行調用   skip 和 limit 用來分頁 例:當前頁從1開始 skip((當前頁數-1)*每頁顯示條數).limit(每頁顯示條數)
db.emp.find({}).sort({sal:1,empno:-1}).skip(0).limit(10);

// 在查詢時,可以在 第二個參數的位置 來設置查詢結果  投影   id默認都會顯示
db.emp.find({},{ename:1});

// 顯示 name 和 sal    _id爲0則表示不顯示
db.emp.find({},{ename:1,_id:0,sal:2});

MongoDB 圖形化管理工具 https://www.mongodbmanager.com/download

MongoDB中的數據關係:

/*
	一對一 one to one
	一對多 one to many  / 多對一 many to one
	多對多 many to many
*/
/* 一對一 */
db.wifeAndHusband.insert([
	{
		name:"黃蓉”,
		husband:{
			name:"郭靖"
		}
	},
	{
		name:"A同學”,
		husband:{
			name:"B同學"
		}
	}
]);


/* 一對多  用戶 和 訂單 */
db.users.insert([
	{
		username:"swk"
	},{
		username:"zbj"
	}
]);

db.order.insert({
	list:["蘋果”,”香蒸”,”大鴨梨”],
	user_id:ObjectId("59c47e35241d8d36ald50ddf")
});

//查撥用戶SWk的訂單
var user_id=db.users.findOne({username:"zbj"})._id;
db.order.find({user_id:user_id});

/* 多對多  */
db.teachers.insert([
      {name:"洪七公"},
      {name:"黃藥師"},
      {name:"龜仙人"}
]);

db.stus.insert([
	{
		name:"郭靖”,
		tech_ids:[
			ObjectId("59c4806d241d8d36ald50de4"),
			ObjectId("59c4806d241d8d36a1d50de5"]
	},
	{
		name:"孫福空”,
		tech_ids:[
			ObjectId("59c4806d241d8d36ald50dfr3"),
			ObjectId("59c4806d241d8d36a1d50dc6")
		]
	}
]);


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章