mongodb基本操作彙總

1.邏輯結構與關係數據庫的對比:

關係型數據庫

MongoDb

database(數據庫)

database(數據庫)

table (表)

collection( 集合)

row( 行)

document( BSON 文檔)

column (列)

field (字段)

index(唯一索引、主鍵索引)

index (全文索引)

join (主外鍵關聯)

embedded Document (嵌套文檔)

primary key(指定1至N個列做主鍵)

primary key  (指定_id field做爲主鍵)

aggreation(groupy)

aggreation (pipeline mapReduce)

2.體系結構:

.

2.mongoDb啓動參數說明

mongoDb 由C++編寫,下載下來的包可以直接啓動

#創建數據庫目錄

mkdir -p /data/mongo

# 啓動mongo

./bin/mongod --dbpath=/data/mongo/

 

常規參數

參數

說明

dbpath

數據庫目錄,默認/data/db

bind_ip

監聽IP地址,默認全部可以訪問

port

監聽的端口,默認27017

logpath

日誌路徑

logappend

是否追加日誌

auth

是開啓用戶密碼登陸

fork

是否已後臺啓動的方式登陸

config

指定配置文件

配置文件示例

vim mongo.conf

內容:

 

dbpath=/data/mongo/

port=27017

bind_ip=0.0.0.0

fork=true

logpath = /data/mongo/mongodb.log

logappend = true

auth=false

 

已配置文件方式啓動

./bin/mongod -f mongo.conf

mongo shell 是一個js 控臺,可以執行js 相關運算如:

> 1+1

2

> var i=123;

> print(i)

123

>

 

4.數據庫與集合的基礎操作

  #查看數據庫

  show dbs;

  #切換數據庫

  use luban;

  #創建數據庫與集合,在插入數據時會自動 創建數據庫與集和

  db.friend.insertOne({name:"wukong",sex:"man"});

  #查看集合

  show tables;

  show collections;

  #刪除集合

  db.friend.drop();

  #刪除數據庫

  db.dropDatabase();

 

三、MongoDB CRUD與全文索引

概要:

  1. 數據的新增的方式
  2. 數據的查詢
  3. 數據的修改刪除
  4. 全文索引查詢

 

 

  1. 數據的新增的方式

關於Mongodb數據插入的說明

  1. 數據庫的新增不需要序先設計模型結構,插入數據時會自動創建。
  2. 同一個集合中不同數據字段結構可以不一樣

 

插入相關方法:

//插入單條

db.friend.insertOne({name:"wukong",sex:"man"});

// 插入多條

db.friend.insertMany([

{name:"wukong",sex:"man"},{name:"diaocan",sex:"woman",age:18,birthday:new Date("1995-11-02")},{name:"zixiao",sex:"woman"}

]);

// 指定ID

 db.friend.insert([

{_id:1,name:"wokong",sex:"man",age:1},

{_id:2,name:"diaocan",sex:"women",birthday:new Date("1988-11-    11")}

  ])

 

2、數據的查詢

概要:

    1. 基於條件的基礎查詢
    2. $and、$or、$in、$gt、$gte、$lt、$lte 運算符
    3. 基於 sort skip limit 方法實現排序與分頁
    4. 嵌套查詢
    5.  數組查詢
    6. 數組嵌套查詢

 

基礎查詢:

#基於ID查找

db.emp.find({_id:1101})

#基於屬性查找

db.emp.find({"name":"魯班"})

# && 運算 與大於 運算

db.emp.find({"job":"講師","salary":{$gt:8000}})

# in 運算

 db.emp.find({"job":{$in:["講師","客服部"]}})

# or 運算

db.emp.find({$or:[{job:"講師"  },{job:"客服部"}] })

 

 

排序與分頁:

//  sort skip limit

db.emp.find().sort({dep:1,salary:-1}).skip(5).limit(2)

 

嵌套查詢:

 

# 錯誤示例:無結果

db.student.find({grade:{redis:87,dubbo:90 });

#錯誤示例:無結果

db.student.find({grade:{redis:87,dubbo:90,zookeper:85} })

 

# 基於複合屬性查找 時必須包含其所有的值 並且順序一至

db.student.find({grade:{redis:87,zookeper:85,dubbo:90} })

 

#基於複合屬性當中的指定值 查找。注:名稱必須用雙引號

db.student.find({"grade.redis":87});

 

db.student.find({"grade.redis":{"$gt":80}});

 

 

數組查詢:

db.subject.insertMany([

{_id:"001",name:"陳霸天",subjects:["redis","zookeper","dubbo"]},

{_id:"002",name:"張明明",subjects:["redis","Java","mySql"]},

{_id:"003",name:"肖炎炎",subjects:["mySql","zookeper","bootstrap"]},

{_id:"004",name:"李鬼才",subjects:["Java","dubbo","Java"]},

])

 

#無結果

db.subject.find({subjects:["redis","zookeper"]})

#無結果

db.subject.find({subjects:["zookeper","redis","dubbo"]})

# 與嵌套查詢一樣,必須是所有的值 並且順序一至

db.subject.find({subjects:["redis","zookeper","dubbo"]})

 

# $all 匹配數組中包含該兩項的值。注:順序不作要求

db.subject.find({subjects:{"$all": ["redis","zookeper"]}})

注:

# 簡化數組查詢

db.subject.find({subjects:"redis"})

# 簡化數組查詢 ,匹配數組中存在任意一值。與$all相對應

db.subject.find({subjects:{$in: ["redis","zookeper"]}})

 

 

數組嵌套查詢:

#基礎查詢 ,必須查詢全部,且順序一至

db.subject2.find({subjects:{name:"redis",hour:12} })

#指定查詢第一個數組 課時大於12

db.subject2.find({"subjects.0.hour":{$gt:12}})

#查詢任科目 課時大於12

db.subject2.find({"subjects.hour":{$gt:12}})

# $elemMatch 元素匹配,指定屬性滿足,且不要求順序一至

db.subject2.find({subjects:{$elemMatch:{name:"redis",hour:12}}})

 

# 數組中任意元素匹配 不限定在同一個對象當中

db.subject2.find({"subjects.name":"mysql","subjects.hour":120})

 

 

 

 

修改

#設置值

db.emp.update({_id:1101} ,{ $set:{salary:10300}  })

#自增

db.emp.update({_id:1101} ,{ $inc:{salary:200}})

 

#基於條件 更新多條數據

# 只會更新第一條

db.emp.update({"dep":"客服部"},{$inc:{salary:100}})

# 更新所有 匹配的條件

db.emp.updateMany({"dep":"客服部"},{$inc:{salary:100}})

 

 

3、數據的修改與刪除

修改

#設置值

db.emp.update({_id:1101} ,{ $set:{salary:10300}  })

#自增

db.emp.update({_id:1101} ,{ $inc:{salary:200}})

 

#基於條件 更新多條數據

# 只會更新第一條

db.emp.update({"dep":"客服部"},{$inc:{salary:100}})

# 更新所有 匹配的條件

db.emp.updateMany({"dep":"客服部"},{$inc:{salary:100}})

 

刪除:

// 基於查找刪除

db.emp.deleteOne({_id:1101})

// 刪除整個集合

db.project.drop()

// 刪除庫

db.dropDatabase()

 

 

4、全文索引

索引的創建

db.project.createIndex({name:"text",description:"text"})

基於索引分詞進行查詢

db.project.find({$text:{$search:"java jquery"}})

   基於索引 短語

db.project.find({$text:{$search:"\"Apache ZooKeeper\""}})

過濾指定單詞

db.project.find({$text:{$search:"java apache -阿里"}})

查看執行計劃

db.project.find({$text:{$search:"java -阿里"}}).explain("executionStats")

 

 

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