Mongodb Notes

liaohui5發表於2019-03-03

圖形化工具的使用:

基本操作

獲取當前資料庫名稱

db.getName()
複製程式碼

建立資料庫

# use 資料庫名, 如果有就切換,沒有就建立
use test_db
複製程式碼

檢視資料庫狀態

db.stats()
複製程式碼

獲取當前資料庫版本

db.version()
複製程式碼

檢視資料庫相關幫助資訊

db.help()
複製程式碼

增刪改查

MySQL 等關係型資料庫中,必須先設計表,然後才能進行 增刪改查 的操作

mongodb 中,不需要設計表,

插入資料

  • 插入普通資料
// db.集合.insert({}); 集合相當於mysql中的資料表
// insert({...}) 傳遞一個 bson 格式的字串, 類似 json
db.users.insert({name:'zs',sex:'男', height: '172'});
複製程式碼
  • 插入多維資料
db.users.insert({
    name:'alex', age:18, height: '172', other: {
        class: '101',
        like: ['code', 'db'],
    } 
});
複製程式碼
  • 陣列資料
db.users.insert({name:'jason', likes: ['code', 'db', 'study', 'sleep']});
複製程式碼

查詢資料

籠統查詢

  • 查詢所有資料
// db.集合.find()       相當於sql語句中的:  select * from users

db.users.find();
複製程式碼
  • 查詢一條資料
// db.集合.findOne()       相當於sql語句中的: select * from users limit 1;

db.users.findOne();
複製程式碼

帶條件的查詢

  • 查詢所有符合條件的資料
// db.集合.find(條件)    相當於sql語句中的: select * from users where name='zs';

db.users.find({name:'zs'})
複製程式碼
  • 查詢符合條件的第一條資料
// db.集合.findOne(條件)  相當於sql語句中的:  select * from users where name='zs' limit 1;
db.users.findOne({name:'zs'})
複製程式碼

範圍條件查詢

  • 查詢指定欄位大於或者小於某個值的所有資料

    • $lt 小於 相當於sql語句中的 <
    // 查詢users集合中身高欄位小於172的所有資料
    // SQL語句: select * from users where height < 172
    db.users.find({height:{'$lt': 172}});
    複製程式碼
    • $gt 大於 相當於sql語句中的 >
    // 查詢users集合中身高欄位大於172的所有資料
    // SQL語句: select * from users where height > 172
    db.users.find({height:{'$gt': 172}}); 
    複製程式碼
  • 查詢指定欄位大於等於或者小於等於的所有資料

    • $lt 小於 相當於sql語句中的 <=
    // 查詢users集合中身高欄位小於等於172的所有資料
    // select * from users where height < 172
    db.users.find({height:{'$lte': 172}});
    複製程式碼
    • $gt 大於 相當於sql語句中的 >=
    // 查詢users集合中身高欄位大於等於172的所有資料
    // select * from users where height > 172
    db.users.find({height:{'$gte': 172}});
    複製程式碼
  • 查詢指定欄位不等於某個值的所有資料

// 查詢指定欄位不等於某個值的所有資料
// select * from user != 'zs'
db.users.find({name: {'$ne': 'zs'}});
複製程式碼

注: 使用關鍵字 $le $lte $gt $gte $ne 必須使用引號引起來, 建議用單引號

設定多個查詢條件

 // SQL語句中的and操作符: select * from users where height<=172 and age>10

// 查詢出所有的height欄位小於等於172 並且 age欄位大於10的所有資料
db.users.find({height:{'$lte': 172 },age: {'$gt': 10}});

// 查詢出所有height欄位小於180欄位 並且 age 欄位等於18 的所有資料
db.users.find({height: {'$lt': 172}, age: 10})


// 查詢出 age欄位等於10 或者 height欄位大於等於 180 的所有資料(文件)
// 相當於SQL語句中的: select * from users where age=10 or height>=180
db.users.find({
    "$or": [
        { age: 10 },
        {height:{"$gte": 180 } }
    ]
});
複製程式碼

多維欄位的查詢

// 查詢 other_info 欄位中 class 的值為101的資料
db.users.find({
    "other.class" : "101",
});
複製程式碼

陣列條件的限制

// 表示查詢 likes 欄位中有 code 和 music 的所有資料(文件)
db.users.find({
    likes:{
        "$all": ["code", "music"]
    }
});


複製程式碼

限制查詢的欄位

// 表示查詢出age等於18的所有資料(文件), 只查詢name欄位
db.users.find({age: 18}, {name:1})

// 表示查詢出age等於18的所有資料(文件), 除了name以外的所有欄位
db.users.find({age: 18}, {name:0})

// 表示查詢出age欄位為18的所有資料(文件)
// 表示只顯示name欄位並且排除預設的_id欄位 {"age":18},{name:1,_id:0}
db.users.find({"age":18},{name:1,_id:0})
複製程式碼

注: 限定條件輸出時,除了預設的_id欄位以外,要麼全部輸出,要麼全部不輸出,不能一個1一個0,

1查詢,0排除, 不然會報錯

修改資料

  • 使用 $set 修改欄位,只修改要修改的欄位的值,其他欄位不變化
// 表示將name欄位為zs的所有資料的 age 欄位修改為 18,其他欄位不變
db.users.update({ name: 'zs'},{'$set': {age : 18}});
複製程式碼
  • 不使用 $set 修改設定的欄位, 除_id欄位以外,其他欄位就刪除
// 表示將name欄位zs的所有資料的的 age 欄位修改為 20, 並且刪除其他所有欄位
db.users.update( { name: 'zs' }, {age: 20});
複製程式碼
  • 修改欄位時,有就直接修改沒有就新增
// 表示將name欄位為zs的所有資料的, name欄位改為xiaoZhang, nickName改為xiaoZhang 其他欄位全部刪除
db.users.update( { name: 'zs' }, {name: "ZhangShang", nickName: "xiaoZhang"})
複製程式碼

資料刪除

  • 刪除指定條件的資料
// 表示刪除所有, name為zs的資料
db.users.remove({ name: "zs" })

// 表示刪除所有 name欄位為zs 並且 age欄位為100 的資料
db.users.remove({name:"zs", age:100});
複製程式碼
  • 刪除欄位
// 表示刪除name欄位值為zhangShang的所有資料 的 age 欄位,{"age": 1}
// 這個值可以是任意的值,比如(字串,true,null)但是不能不寫
db.users.update({name:'zhangShang'}, { '$unset': {"age": 1} });
複製程式碼

限制查詢條數 (分頁)

/* 表示查詢符合條件的跳過前5條後面的10條資料 */
db.users.find().skip(5).limit(10);
複製程式碼

排序 sort

  • 預設是安裝 _id 欄位升序排序, 利用 sort 方法可以根據指定的方法排序
/* 根據name欄位升序排序,如果有相同的就根據 height 欄位降序排序*/
db.users.find().sort({
    name: 1,
    height: -1
});
複製程式碼

限制分頁條數並且排序

db.users.find().skip(5).limit(5).sort({
    name: 1,
    age: -1
});
複製程式碼
  • 1 表示升序, -1 表示降序

相關文章