1. 程式人生 > >MongoDB 之 增刪改查

MongoDB 之 增刪改查

對於mongodb,使用了不存在的物件,就等於在建立這個物件

一, 建立資料庫

 

注意:操作資料庫的方式:db.表名(Collections).操作(引數)

二,增

插入資料(insert     insertOne     insertMany) 

insert:插入一條或者多條資料,需要帶有允許插入多條的引數,這個方法目前官方已經不推薦

使用insertOne插入一條資料:

db.user.insertOne({id: 4, name: "qqq", age: 20})  # 插入一條資料
db.user
.insertMany([{id: 7, name: "www", age: 20}, {id: 8},{id:9}]) # 插入多條資料

三,刪

db.user.remove({}) # 官方不推薦使用了
db.
user.deleteOne({id:7}) # 刪除一條id=7的資料 db.user.deleteMany({name:"ttt"}) # 刪除所有name=“ttt"的資料 db.user.deleteMany({}) # 清空資料庫 db.user.drop() # 清空資料庫

三, 改

db.user.updateOne({id:1
},{$set:{name:"花大炮"}}) # 修改id為1的資料的 name為花大炮 db.user.updateMany({age:20},{$set:{name:"jjj"}}) # 修改age=20的所有資料的 name為"jjj" db.user.updateMany({age:20},{$set:{hobby: ["ooo", "xxx"]}}) # 可以直接修改為一個數組

針對Field的$修改器

$set 修改器之一 設定 將某Key設定為某值:

 db.user.updateMany({age:20},{$set:{name:"jjj"}})

$unset:刪除當前的Fields

db.user.updateOne({id:7}, {$unset: {hobby: "" }})  # 把id為7的資料,刪除hobby這個欄位
db.user.updateOne({id:4}, {$unset: {hobby: 0 }})  # 把id為4的資料,刪除hobby這個欄位

$inc 在原有值基礎上增加 (int型別,就是增加或減少之(負數),string型別,就是字串拼接)

db.user.updateOne({name:"mmm"},{$inc: {age:5}})  # 給name="mmm"的資料,的age在原來的基礎上加上5

針對Arrays的$修改器

$push 在Arrays中新增一個元素 

db.user.updateOne({name: "mmm"},{$push:{hobby:"哈哈"}})  # 給name="mmm"的資料中的hobby對於的值(列表),中新增一個值為"哈哈”

db.user.updateOne({name: "jjj"},{$push: {hobby: "dfd"}})  # 該條資料沒有欄位hobby,則建立一個hobby,把資料放進

  db.user.updateOne({name:"mmm"},{$push:{hobby: ["ccc","vvv", "bbb"]}}) 只新增第一個進去
  db.user.updateOne({name:"mmm"},{$pushAll:{hobby: ["ccc","vvv", "bbb"]}}) 把列表整體新增進去

$pull 在Arrays中刪除一個元素

db.user.updateOne({name:"mmm"},{$pull: {hobby:"ccc"}})  # 在name=mmm這條資料的hobby對應的列表中刪掉ccc

$pop 在Arrays中刪除最後一個元素或第一個元素

db.user.updateOne({name:"mmm"}, {$pop: {hobby:-1}})  刪除第一個
db.user.updateOne({name: "mmm"},{$pop:{hobby: 1}}) 刪除最後一個

$ : 儲存 滿足前置條件列表元素的下標索引

db.user.updateOne({name: "mmm", hobby: "哈哈"},{$set:{"hobby.$": "大西瓜"}}) # 將name="mmm"這條資料中的hobby對應的列表中的 “哈哈”,改成“大西瓜”
上面的$就是記錄前面的"哈哈"在hobby中的索引,所以也可以直接這麼寫:
db.user.updateOne({name: "mmm"},{$set:{"hobby.0": "綠蘋果"}}) # 修改name="mmm"的資料中的hobby索引為0的值為"綠蘋果"
db.user.updateOne({name: "mmm"},{$set:{"hobby.1": "大西瓜"}})

混合用法

db.user.updateOne({name:"hhh"},{$set:{course:[
        {course_name: "python", score:100},
        {course_name: "vue", score:101},
        {course_name: "mysql", score:99}
    ]}})   # 插入資料

db.user.updateOne({name: "hhh", "course.course_name":"python"},{$inc:{"course.$.score": 10}})  # $獲取了前面資料的索引
db.user.updateOne({name: "hhh"},{$inc:{"course.0.score": 20}})

四,查

db.user.find({})  # 查詢所有資料
db.user.findOne({name:"lll"})  # 查詢name=“lll"的資料

$lt 小於  $gt 大於  $lte 小於等於  $gte 大於等於  $eq : 等於

db.user.find({age:{$lte:19}})  # 查詢age小於等於19的資料
db.user.find({age:{$gt:19}})  # 查詢age大於19的資料

查詢$關鍵字:

{
    "_id" : ObjectId("5bc6eac2613e5c72d4c888b0"),
    "id" : 10,
    "name" : "mmm",
    "age" : 30,
    "hobby" : [
        "綠蘋果",
        "大西瓜",
        "小紅棗",
        "ccc",
        "vvv"
    ]
}

對於上述資料:

$all 滿足所有元素的資料

db.user.find({hobby: {$all: ["大西瓜"]}})  # 可以找到
db.user.find({hobby: {$all: ["大西瓜", "ccc"]}})   # 可以找到

# 主要元素在資料中,就可以找到,可以和原始資料不一樣!

$in 滿足其中一個元素的資料

db.user.find({hobby: {$in: ["ccc", "vvv"]}})  # 資料在要查詢資料的hobby中就可以查到

$or 滿足其中一個欄位的資料

db.user.find({$or: [{name:"lll"}, {id:1}]})  # 查詢 name=”lll“ 或者 id=1的資料
db.user.deleteMany({$or:[{id:8},{id:9}]})  # 刪除id=8 或者 id=9的資料

limit(x):

只查詢前x條資料

skip(x):

跳過前x條資料

sort({ id:-1 }):

根據id欄位進行倒序排列:-1 正序排列:1

分頁使用

db.user.find({}).sort({id:1}).skip(0).limit(3)  # 第一頁
db.user.find({}).sort({id:1}).skip(3).limit(3)  # 第二頁
db.user.find({}).sort({id:1}).skip(6).limit(3)  # 第三頁
db.user.find({}).sort({id:1}).skip(9).limit(3)  # 第四頁
db.user.find({}).sort({id:1}).skip(12).limit(3)  # 第五頁