天天看點

MongoDB的基本指令(insert、delete、find、update) 1.展示資料庫、資料表2.建立&新增3.删除4.查找5.修改6.條件查找7.排序8.其他

 1.展示資料庫、資料表

  • show dbs 展示所有資料庫
  • use dbname    進入dbname資料庫,大小寫敏感,沒有這個資料庫也不要緊
    1. use 指令後跟的資料庫名,如果存在就進入此資料庫,

    2. 如果不存在就建立,是以這種建立方式又叫隐式建立

    3. 注意:使用指令use mydb1建立資料庫後,并沒有真正生成對應的資料檔案,

    4. 如果此時退出,此資料庫将被删除,隻有在此資料庫中建立集合後,才會真正生成資料檔案

  • show collections    顯示資料庫中的集合,相當于表格【或使用show tables】
  • db,檢視目前所在資料庫

2.建立&新增

  • 顯示建立可集合,db.createCollection('集合名稱')
  • db.users.save({"name":"lecaf"})    建立了名為users的集合,并新增了一條{"name":"lecaf"}的資料
  •  db.users.insert({"name":"ghost", "age":10})    在users集合中插入一條新資料,,如果沒有users這個集合,mongodb會自動建立
  •  save()和insert()也存在着些許差別:
    • 若新增的資料主鍵已經存在,insert()會不做操作并提示錯誤,而save() 則更改原來的内容為新内容。
  • 存在資料:{ _id : 1, " name " : " n1 "} ,_id是主鍵
    • insert({ _id : 1, " name " : " n2 " })    會提示錯誤
    • save({ _id : 1, " name " : " n2 " })     會把 n1 改為  n2 ,有update的作用。
3.2 版本後還有以下幾種文法可用于插入文檔:
 db.collection.insertOne():向指定集合中插入一條文檔資料
 db.collection.insertMany():向指定集合中插入多條文檔資料
#  插入單條資料
> var document = db.collection.insertOne({"a": 3})
> document
{
        "acknowledged" : true,
        "insertedId" : ObjectId("571a218011a82a1d94c02333")
}
#  插入多條資料
> var res = db.collection.insertMany([{"b": 3}, {'c': 4}])
> res
{
        "acknowledged" : true,
        "insertedIds" : [
                ObjectId("571a22a911a82a1d94c02337"),
                ObjectId("571a22a911a82a1d94c02338")
        ]
}      
MongoDB的基本指令(insert、delete、find、update) 1.展示資料庫、資料表2.建立&新增3.删除4.查找5.修改6.條件查找7.排序8.其他

3.删除

db.users.remove({})    删除users集合下所有資料

remove

文法

  • remove() 方法的基本文法格式如下所示:

db.collection.remove(
   <query>,
   <justOne>
)      
MongoDB的基本指令(insert、delete、find、update) 1.展示資料庫、資料表2.建立&amp;新增3.删除4.查找5.修改6.條件查找7.排序8.其他
  • 如果你的 MongoDB 是 2.6 版本以後的,文法格式如下:

db.collection.remove(
   <query>,
   {
     justOne: <boolean>,
     writeConcern: <document>
   }
)      
MongoDB的基本指令(insert、delete、find、update) 1.展示資料庫、資料表2.建立&amp;新增3.删除4.查找5.修改6.條件查找7.排序8.其他
  • 參數說明:

  • query :(可選)删除的文檔的條件。

  • justOne : (可選)如果設為 true 或 1,則隻删除一個文檔。

  • writeConcern :(可選)抛出異常的級别。

  • db.users.remove({"name": "lecaf"})    删除users集合下name=lecaf的資料
  • db.users.drop()或db.runCommand({"drop","users"})    删除集合users
  • db.runCommand({"dropDatabase": 1})    删除目前資料庫【或者使用,db.dropDatabase()】

deleteOne() 和 deleteMany()

remove() 方法已經過時了,現在官方推薦使用 deleteOne() 和 deleteMany() 方法。

如删除集合下全部文檔:

db.inventory.deleteMany({})

删除 status 等于 A 的全部文檔:

db.inventory.deleteMany({ status : "A" })

删除 status 等于 D 的一個文檔:

db.inventory.deleteOne( { status: "D" } )

4.查找

  • db.users.find()    查找users集合中所有資料
  • db.users.findOne()    查找users集合中的第一條資料
  • 條件查找,參考下文第6條

5.修改

db.collection.update(criteria,objNew,upsert,multi)

參數說明:

  • criteria:用于設定查詢條件的對象(必填)({},表示更新所有)

  • objNew:用于設定更新内容的對象(必填)

  • upsert:如果記錄已經存在,更新它,否則新增一個記錄,取值為0或1[true為插入,預設是false,不插入]

  • multi:如果有多個符合條件的記錄,是否全部更新,取值為0或1[mongodb 預設是false,隻更新找到的第一條記錄]

  • 注意:預設情況下,隻會更新第一個符合條件的記錄

  • 一般情況下後兩個參數分别為0,1 ,即:

  • db.collection.update(criteria,objNew,0,1)

  • db.users.update({"name":"lecaf"}, {"age":10})    
    • 修改name=lecaf的資料為age=10,第一個參數是查找條件,第二個參數是修改内容,
除了主鍵,其他内容會被第二個參數的内容替換,主鍵不能修改

在3.2版本開始,MongoDB提供以下更新集合文檔的方法:

db.collection.updateOne() 向指定集合更新單個文檔

db.collection.updateMany() 向指定集合更新多個文檔

  • 首先我們在test集合裡插入測試資料

use test

db.test_collection.insert( [

{"name":"abc","age":"25","status":"zxc"},

{"name":"dec","age":"19","status":"qwe"},

{"name":"asd","age":"30","status":"nmn"},

] )

  • 更新單個文檔

> db.test_collection.updateOne({"name":"abc"},{$set:{"age":"28"}})

{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

> db.test_collection.find()

{ "_id" : ObjectId("59c8ba673b92ae498a5716af"), "name" : "abc", "age" : "28", "status" : "zxc" }

{ "_id" : ObjectId("59c8ba673b92ae498a5716b0"), "name" : "dec", "age" : "19", "status" : "qwe" }

{ "_id" : ObjectId("59c8ba673b92ae498a5716b1"), "name" : "asd", "age" : "30", "status" : "nmn" }

>

  • 更新多個文檔

> db.test_collection.updateMany({"age":{$gt:"10"}},{$set:{"status":"xyz"}})

{ "acknowledged" : true, "matchedCount" : 3, "modifiedCount" : 3 }

> db.test_collection.find()

{ "_id" : ObjectId("59c8ba673b92ae498a5716af"), "name" : "abc", "age" : "28", "status" : "xyz" }

{ "_id" : ObjectId("59c8ba673b92ae498a5716b0"), "name" : "dec", "age" : "19", "status" : "xyz" }

{ "_id" : ObjectId("59c8ba673b92ae498a5716b1"), "name" : "asd", "age" : "30", "status" : "xyz" }

>

6.條件查找

  • db.collection.find({ "key" : value })    查找key=value的資料
  • db.collection.find({ "key" : { $gt: value } })    key > value
  • db.collection.find({ "key" : { $lt: value } })    key < value
  • db.collection.find({ "key" : { $gte: value } })    key >= value
  • db.collection.find({ "key" : { $lte: value } })    key <= value
  • db.collection.find({ "key" : { $gt: value1 , $lt: value2 } })    value1 < key <value2
  • db.collection.find({ "key" : { $ne: value } })    key <> value
  •  db.collection.find({ "key" : { $mod : [ 10 , 1 ] } })    取模運算,條件相當于key % 10 == 1 即key除以10餘數為1的
  • db.collection.find({ "key" : { $nin: [ 1, 2, 3 ] } })    不屬于,條件相當于key的值不屬于[ 1, 2, 3 ]中任何一個
  • db.collection.find({ "key" : { $in: [ 1, 2, 3 ] } })    屬于,條件相當于key等于[ 1, 2, 3 ]中任何一個
  • db.collection.find({ $or : [{a : 1}, {b : 2} ] })    $or或 (注意:MongoDB 1.5.3後版本可用),符合條件a=1的或者符合條件b=2的資料都會查詢出來
  • db.collection.find({ "key" : { $size: 1 } })    $size 數量、尺寸,條件相當于key的值的數量是1(key必須是數組,一個值的情況不能算是數量為1的數組)
  • db.col.find({key1:value1, key2:value2}).pretty() 傳入多個鍵(key),每個鍵(key)以逗号隔開,類似正常 SQL 的 AND 條件
    • pretty() 方法以格式化的方式來顯示所有文檔。

AND 和 OR 聯合使用

db.col.find({"likes": {$gt:50}, $or: [{"by": "日期"},{"title": "MongoDB 教程"}]}).pretty()

exists

db.collection.find({ "key" : { $exists : true|false } })  

 $exists 字段存在,true(或者1)傳回存在字段key的資料,false(或者0)傳回不存在字度key的資料

  • 查詢集合中的文檔 ,$exists,用于查詢集合中存在某個鍵的文檔或不存在某個鍵的文檔,

  • 例如查詢customer集合中存在name鍵的所有文檔,可以使用 db.customer.find({name:{$exists:1}}),

  • $exists:1表示真,指存在

  • $exists:0表示假,指不存在

  • db.collection.find({ "key": /^val.*val$/i })    正則,類似like;“i”忽略大小寫;“m”支援多行
  • db.collection.find({ "key": value , $or : [{ a : 1 } , { b : 2 }] })    符合條件key=value ,同時符合其他兩個條件中任意一個的資料
  •  db.collection.find({ "key.subkey" :value })    内嵌對象中的值比對,注意:"key.subkey"必須加引号
  • db.collection.find({ "key": { $not : /^val.*val$/i } })    這是一個與其他查詢條件組合使用的操作符,不會單獨使用。上述查詢條件得到的結果集加上$not之後就能獲得相反的集合。
  • 查詢集合中的文檔 ,$all主要用來查詢數組中的包含關系,查詢條件中隻要有一個不包含就不傳回
db.c2.insert({name:"user1",post:[1,2,3,4,5]})
db.c2.find()
{
    "_id" : ObjectId("59dabc958d09c4a012f7b9cc"),
    "name" : "user1",
    "post" : [ 
        1.0, 
        2.0, 
        3.0, 
        4.0, 
        5.0
    ]
}
db.c2.find({post:{$all:[1,2]}})
{
    "_id" : ObjectId("59dabc958d09c4a012f7b9cc"),
    "name" : "user1",
    "post" : [ 
        1.0, 
        2.0, 
        3.0, 
        4.0, 
        5.0
    ]
}
#查詢條件中隻要有一個不包含就不傳回
db.c2.find({post:{$all:[1,2,6]}})
Fetched 0 record(s) in 1ms      
MongoDB的基本指令(insert、delete、find、update) 1.展示資料庫、資料表2.建立&amp;新增3.删除4.查找5.修改6.條件查找7.排序8.其他

 查詢集合中的文檔 ,類似于關系型資料庫,mongodb中也有遊标(臨時的存儲區)的概念

db.users.find()
/* 1 */
{
    "_id" : ObjectId("59da04f96d36659d9c51014e"),
    "name" : "lecaf"
}
/* 2 */
{
    "_id" : ObjectId("59da04ff6d36659d9c51014f"),
    "name" : "ghost",
    "age" : 10.0
}
var x = db.users.find()
x.hasNext()
x.next()
/* 1 */
{
    "_id" : ObjectId("59da04f96d36659d9c51014e"),
    "name" : "lecaf"
}      
MongoDB的基本指令(insert、delete、find、update) 1.展示資料庫、資料表2.建立&amp;新增3.删除4.查找5.修改6.條件查找7.排序8.其他
  • 更新集合中的文檔,使用 $inc 将集合中name為user1的age加1,其它鍵不變, $inc表示使某個鍵值加減指定的數值
  • 更新集合中的文檔, $unset 用來删除某個鍵,例如删除name為user1的文檔中的address鍵,可以使用指令:
db.c1.update({name:”user1”},{$unset:{address:1}},0,1)      
MongoDB的基本指令(insert、delete、find、update) 1.展示資料庫、資料表2.建立&amp;新增3.删除4.查找5.修改6.條件查找7.排序8.其他

7.排序

db.collection.find().sort({ "key1" : -1 ,"key2" : 1 })    這裡的1代表升序,-1代表降序

8.其他

  • db.collection.find().limit(5)    控制傳回結果數量,如果參數是0,則當作沒有限制,limit()将不起作用
  • db.collection.find().skip(5)    控制傳回結果跳過多少數量,如果參數是0,則當作沒有限制,skip()将不起作用,或者說跳過了0條
  • db.collection.find().skip(5).limit(5)   可用來做分頁,跳過5條資料再取5條資料
  • db.collection.find().count(true)    count()傳回結果集的條數
  • db.collection.find().skip(5).limit(5).count(true)  
    • 在加入skip()和limit()這兩個操作時,
    • 要獲得實際傳回的結果數,需要一個參數true,否則傳回的是符合查詢條件的結果總數

參考來源:

【MongoDB】1.安裝--以及簡單使用 - Angel擠一擠 - 部落格園

參考來源: 

MongoDB系列(一):簡介及安裝 - 程式設計玩家 - 部落格園