MongoDb 使用學習筆記


 --打開cmd命令窗口
     - 輸入mongod 啓動mongodb服務器
-- 再打開一個窗口
    - 輸入mongo 連接mongodb 出現  >
  - 32 位注意:
       啓動服務器是,需要輸入如下內容
        mongod --storageEngine=mmapv1

       --dbpath     指定路徑  --port  指定端口號
    --服務器
      用來保存數據
      mongod 用來啓動服務器
 --- 客戶端
    操作數據
     mongo 用來啓動客戶端
---將MongoDB設置爲系統服務,可以自動在後臺啓動,不要每次手動啓動
   1. 在c盤根目錄創建data
   - 在data 下創建db和log 文件夾
   2 創建配置文件
      在目錄 C:\Program Files\MongoDB\Server\4.2 添加一個配置文件
       mongod.cfg
   3. 以管理員身份打開命令行
   4 執行如下的命令:

    sc.exe create MongoDB binPath="\" C:\Program Files\MongoDB\Server\4.2\bin\mongod.exe\" --service --config=\"C:\Program Files\MongoDB\Server\4.2\mongod.cfg\"" DisplayName="MongoDB" start="auto"
    
     sc.exe create MongoDB binPath="\" mongodbin目錄\mongod.exe\" --service --config=\"mongod安裝目錄\mongod.cfg\"" DisplayName="MongoDB" start="auto"

  5.啓動mongdb 任務管理器-服務-找到MongoDb 右擊 啓動


  數據庫(database)
    數據庫是一個倉庫,在倉庫中存放集合
  集合(collection)
    集合類似於數組,在集合中可以存放文檔
  文檔(document)
   文檔數據庫中的最小單位,我們存儲和操作的內容都是文檔。
    在MongoDB中,數據庫和集合都不需要手動創建,當我們創建文檔時,如果文檔所在的集合和數據庫不存在會自動數據庫和集合

---- 

  如何使用MongoDB 
     show databases/ show dbs 
       - 顯示數據庫

   use 數據庫名  
      - 進入到指定的數據庫中
   db 
    -查看當所處的數據庫
   show collections  
      - 查看數據庫中有幾個集合
- 數據庫的CRUD(增刪改查)的操作
   向數據庫中插入文檔
     db.<collection>.insert(doc)
      - 向集合中插入一個文檔
      - 例子:向test數據庫中的stus 集合中插入一個新的學生對象
        {name:"孫悟空",age:18,gender:"男"}
      db.stus.insert({name:"孫悟空",age:18,gender:"男"})
====================================================
Mongoose 是一個讓我們可以通過Node來操作MongoDB的模塊。
  Mongoose 是一個對象文檔模型(ODM)庫,它對Node原生的MongoDB模塊進行了進一步的優化封裝,並提供了更多的功能。
在大多數情況下,它被用來把結構化的模式應用到一個MongoDB集合,並提供了驗證和類型轉換等好處。

Node 裏面就有一個MongoDB,並提供了驗證和類型轉換等好處
  可以爲文檔創建一個模式結構(Schema)
  可以對模型中的對象/文檔進行驗證
  數據可以通過類型轉換爲對象模型
  可以使用中間件來應用業務邏輯掛鉤
  比Node 原生的MongoDB 驅動更容易
== 
mongoose 中爲我們提供了幾個對象
  -Schema(模式對象)
   .schema對象定義約束了數據庫中的文檔結構
 -Model
   .model對象作爲集合中的所有文檔的展示,相當於MongoDB 數據庫中的集合collection
 -Document
   document表示集合中的具體文檔,相當於計劃中的一個具體的文檔。

二、 使用中的試題例子

  

//  1.進入my_test數據庫 
 use my_test;

// 2. 向數據庫的user 集合中插入一個穩定
 db.users.insert({username:"sunwukong"})
 
show dbs;

// 3. 查詢user集合中的文檔

db.users.find();

// 4. 向數據庫的user集合中插入一個文檔
db.users.insertOne({username:"zhubajie"})
// 5. 查詢數據庫user集合中的文檔
db.users.find();
// 6. 統計數據庫user集合中的文檔數量

db.users.find().count()
// 7.查詢數據庫user集合中username爲sunwukong的文檔

db.users.find({username:"sunwukong"})
// 8.向數據庫user集合中的username爲sunwukong的文檔,添加一個address屬性,屬性值爲huaguoshan

db.users.update({username:"sunwukong"},{$set:{address:"huaguoshan"}})
// 9.使用{username:"tangseng"}替換username爲zhubajie的文檔
db.users.replaceOne({username:"zhubajie"},{username:"tangseng"})


// 10.刪除username 爲sunwukong的文檔的address屬性
db.users.update({username:"sunwukong"},{$unset:{address:1}})

// 11.向username爲sunwukong的文檔中,添加一個hobby:{cities:["beijing","shanghai","shenzhen"],moves:["sanguo","hero"]}
// mongoDb 的文檔屬性也可以是一個文檔,當一個文檔的屬性是
db.users.update({username:"sunwukong"},{$set:{hobby:{cities:["beijing","shanghai","shenzhen"],moves:["sanguo","hero"]}}})
db.users.update({username:"sunwukong"},{$unset:{cities:1,moves:1}});

// 12 向usernaeme 爲tangseng的文檔中,添加一個hoby:{movies:[{"A Chinese Odyssey","King of"}]}
db.users.update({username:"tangseng"},{$set:{hobby:{movies:["A Chinese Odyssey","King of comedy"]}}})


// 13.查詢喜歡電影hero的文檔
// MongoDB 支持直接通過內嵌文檔屬性進行查詢,如果要查詢內嵌文檔則可以通過。的形式匹配
// 如果要通過內嵌文檔進行查詢,此時屬性名必須使用引號
db.users.find({'hobby.moves':"hero"});

//14. 向唐僧添加一個電影Interatellar
// $push 用於向數據中家人一個新的元素
// $addToSet 向數組中添加一個新元素,如果數組中存在了該元素則添加失敗則不會添加
db.users.update({username:"tangseng"},{$addToSet:{"hobby.movies":"Interatellar"}});
db.users.update({username:"tangseng"},{$push:{"hobby.movies":"Interatellar"}});

// 15. 刪除喜歡北京的用戶
db.users.remove({"hobby.cities":"beijing"});
// 16. 刪除user集合
db.users.remove({});
db.users.drop();
db.users.find();
show dbs;

// 17. 向numbers中插入20000條數據
use numbers2;
db.numbers.insert({num:1});
 for(var i=1; i<=200;i++){
 db.numbers2.insert({num:i})
 }
 
 db.numbers2.find().count();
 
 db.numbers2.find();
 
 db.numbers2.drop({});
 
 use numbers2;
 var arr = [];
 for(var i=1; i<= 20000; i++){
  arr.push({num:i});
 }
 db.numbers2.insert(arr);
 
 show dbs;
 
 //19. 查詢numbers中num爲500的文檔
 db.numbers2.find({num:{$eq:500}})
 
 //20查詢numbers2 中num 小於30
 db.numbers2.find({num:{$lt:30}});
 
 //21 查詢numbers中num大於40小於50的文檔
 db.numbers2.find({num:{$gt:40,$lt:5}});
 
 //22 查詢numbers中num大於1999的文檔
 db.numbers2.find({num:{$gt:1999}});
 
 // 23.查詢numbers2 中的前10條數據
 // limit()設置數據顯示的上限
 db.numbers2.find().limit(10);
 
 // 24. 查詢number2 集合中第11條到20條數據 
 // skip() 用於跳過指定數量的數據
 /*  分頁 每頁顯示10條
   1-10    0
   11-20   10
   21-30   20
   31-40   30
     skip((頁碼-1)*每頁顯示條數).limit(每頁顯示條數);
     MongoDb 會自動調整skip和limit的位置
     
   */
 db.numbers2.find().skip(10).limit(20);

/**
 * 文檔之間的關係
   一對一 (one to one)
      在mongoDb 可以通過內嵌文檔的形式提現出一對一的關係
   一對多 (one to many)
   父母 - 孩子
   用戶 - 訂單
   文章 - 評論
     也可以通過內嵌文檔映射一對多
   多對多 (many to many)
    -分類  - 商品
    -老師  - 學生
*/
use wifeAndHusband;
// 1.文檔內嵌 一對一
db.wifeAndHusband.insert(
[{
   name: "黃蓉",
   husband:{
      name: "郭靖",
   }
},
{
  name: "潘金蓮",
  husband:{
    name:"武大郎"
  }
}]
);

db.wifeAndHusband.remove({"id":"603072dd2f32244df3485e55"});
db.wifeAndHusband.drop({});
db.wifeAndHusband.find();

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

db.order.insert({
   list:["蘋果","香蕉","大鴨梨"],
   user_id:ObjectId("603077172f32244df3485e5c"),
 });
 
  db.order.insert({
   list:["牛肉","漫畫"],
   user_id:ObjectId("603077172f32244df3485e5c"),
 });
 
 db.order.insert({
   list:["西瓜","香蕉"],
   user_id:ObjectId("603077172f32244df3485e5d"),
 });
 
db.users.findOne({username:"swk"})._id;
 
 // 查詢孫悟空的訂單
 var user_id = db.users.findOne({username:"swk"})._id;
 db.order.find({user_id:user_id});
 
db.users.find();

db.order.find();

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

db.stu.insert([
{
 name:"郭靖",
 tech_ids:[
   ObjectId("6030c7869d29e4c13cd004ff"),
   ObjectId("6030c7869d29e4c13cd00500")
 ]
}
]);
// 33 爲所有薪資低於1000的員工增加工資400元
// $inc 對某個值自增
db.emp.updateMany({sal:{$le:1000}},{$inc:{sal:400}});

// $inc 
db.teachers.find();

db.emp.insert([
    {
        "empno": 7867,
        "ename": "李凌",
        "job": "職員",
        "mgr": 7902,
        "hiredate": "1987-07-01",
        "sal": 700,
        "deptno": 20,
        "commo": 500
    },
    {
        "empno": 7369,
        "ename": "林沖",
        "job": "職員",
        "mgr": 7903,
        "hiredate": "1987-07-01",
        "sal": 600,
        "deptno": 20,
        "commo": 500
    },
    {
        "empno": 7369,
        "ename": "度三娘",
        "job": "銷售",
        "mgr": 7903,
        "hiredate": "1987-07-01",
        "sal": 890,
        "deptno": 20,
        "commo": 500
    },
    {
        "empno": 7654,
        "ename": "潘金蓮",
        "job": "銷售",
        "mgr": 7903,
        "hiredate": "1987-07-01",
        "sal": 1100,
        "deptno": 20,
        "commo": 500
    },
  {
 "empno":7934,
  "ename":"魯智深",
  "job":"銷售",
  "mgr":7934,
  "hiredate":"1987-07-01",
  "sal":800,
  "deptno":20,
  "commo":500

},{
 "empno":7900,
  "ename":"武松",
  "job":"銷售",
  "mgr":7900,
  "hiredate":"1987-07-01",
  "sal":800,
  "deptno":20,
  "commo":500

}
]);

// sort 可以任意的順序 1 表示升序, -1 表示降序
db.emp.find({}).sort({sal:1,empno:-1});
// 查詢投影,查詢部分字段
db.emp.find({},{ename:1});
db.emp.insert({sal:"hello"});
db.emp.find();
use mongoose_test;
db.students.find();

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