1.展示資料庫、資料表
- show dbs 展示所有資料庫
- use dbname 進入dbname資料庫,大小寫敏感,沒有這個資料庫也不要緊
use 指令後跟的資料庫名,如果存在就進入此資料庫,
如果不存在就建立,是以這種建立方式又叫隐式建立
注意:使用指令use mydb1建立資料庫後,并沒有真正生成對應的資料檔案,
如果此時退出,此資料庫将被删除,隻有在此資料庫中建立集合後,才會真正生成資料檔案
- 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")
]
}

3.删除
db.users.remove({}) 删除users集合下所有資料
remove
文法
remove
文法
-
remove() 方法的基本文法格式如下所示:
db.collection.remove(
<query>,
<justOne>
)
-
如果你的 MongoDB 是 2.6 版本以後的,文法格式如下:
db.collection.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
}
)
-
參數說明:
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()
deleteOne() 和 deleteMany()
remove() 方法已經過時了,現在官方推薦使用 deleteOne() 和 deleteMany() 方法。
如删除集合下全部文檔:
如删除集合下全部文檔:
db.inventory.deleteMany({})
删除 status 等于 A 的全部文檔:
删除 status 等于 A 的全部文檔:
db.inventory.deleteMany({ status : "A" })
删除 status 等于 D 的一個文檔:
删除 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中也有遊标(臨時的存儲區)的概念
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"
}
- 更新集合中的文檔,使用 $inc 将集合中name為user1的age加1,其它鍵不變, $inc表示使某個鍵值加減指定的數值
- 更新集合中的文檔, $unset 用來删除某個鍵,例如删除name為user1的文檔中的address鍵,可以使用指令:
db.c1.update({name:”user1”},{$unset:{address:1}},0,1)
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系列(一):簡介及安裝 - 程式設計玩家 - 部落格園