MongoDB CRUD基本觀念
內容目錄
ToggleMongoDB Create
新增或插入操作將新文檔添加到collection之中。如果collection當前不存在,則會插入操作將新增collection。
-
db.collection.insert()
單筆文檔:將單個文檔插入collection中
新增一個新文檔
nInserted: 新增多少筆文檔
WriteResult({ "nInserted" : 1 })
多筆文檔:將多筆文檔插入collection中
新增多個文檔
回傳一個BulkWriteResult物件
-
db.collection.insertOne()
將單個文檔插入collection中
新增一個新文檔
回傳一個BulkWriteResult物件
-
db.collection.insertMany()
將多個文檔插入collection中
新增多筆文檔
回傳一個BulkWriteResult物件
MongoDB Read
- 從collection中讀取操作文檔,在collection中查詢文檔
空查詢過濾器文檔({})選擇collection中的所有文檔。
db.collection.find({})
將查詢過濾器文檔省略到db.collection.find()等同於指定空查詢文檔。
db.collection.find()
查詢單一個符合條件的第一個文檔,並且會以pretty()的方法呈現。
db.collection.findOne()
- 查詢方式
MongoDB提供db.collection.find()方法來從collection中讀取文檔。該方法將游標返回到匹配的文檔。
db.collection.find(<query filter>, <projection>)
<query filter>:查詢過濾器,用於指定要返回的文檔。
<projection>:一個查詢投影,用於指定要返回的匹配文檔中的哪個字段。
- 指定查詢過濾條件
指定相等條件
{ <field1> : <value1>, ... }
範例:
db.employees.find( { name : "SMITH" } )
- 使用查詢運算符指定條件
{ <field1> : { <operator1> : <value1> , ... }
範例:
db.emplyees.find( { name : { $in : [ "SMITH" , "ALLEN" ] } } )
- 指定AND條件
db.employees.find( { empno : 7499 , name : "ALLEN" } )
- 指定OR條件
db.employees.find( { $or : [ { deptno : 30 } , { sal : { $lt : 1000 } } ] } )
- 指定AND以及OR條件
db.employees.find( { deptno : 30 , $or : [ { deptno : 30 } , { sal : { $lt : 1000 } } ] } )
- 投影文檔
投影文檔限制所有匹配文檔的返回字段,他可以指定字段的包含/排除。
{ field1 : <value>, field2 : <value> ... }
<value>可以是以下任何一種:
- 1或true為包括該字段
- 0或false為排除該字段
-
查詢Null或缺少字段
平等過濾器
db.emplyees.find( { name : "SMITH" , sex : null } )
類型檢查(BSON Type)
db.emplyees.find( { name : "SMITH" , sex : { $type : 10 } } )
存在檢查
db.emplyees.find( { sex : { $exists : false } } )
-
在mongo shell中迭代一個游標
手動迭代游標
與forEach()相同
var mCur = db.emplyees.find( { deptno : 30 } )
mCur.forEach( printjson );
迭代索引:toArray()迭代方法並以陣列形式傳回文檔
var mCUR = db.employees.find( { deptno : 30 } );
var docAry = mCur.toArray();
var mDoc = docAry[3];
printjson( mDoc )
MongoDB Update
-
更新操作可修改collection中的現有文檔
db.collection.update()
db.collection.updateOne()
db.collection.updateMany()
db.collection.replaceOne()
-
要更新文檔中的字段,MongoDB提供更新運算符,例如$set來修改值
如果字段不存在,某些更新運算符(如$set)將新增該字段。
db.collection.update()
更新單個紀錄(比如:db.collection.updateOne()
)
更新多個紀錄(比如:db.collection.updateMany()
)
-
替換文檔
db.collection.replaceOne()
將與過濾器名稱匹配的第一個文檔替換為與新文檔相同的”SMITH”:
db.collection.update()
MongoDB Delete
-
刪除操作從collection中刪除文檔
db.collection.remove()
db.collection.deleteOne()
db.collection.deleteMany()
-
刪除所有文檔
要從collection中刪除所有文檔,請將空過濾器文檔{}傳遞給db.collection.remove()
或db.collection.deleteMany()
。
但如果要從collection中刪除所有文檔,使用db.collection.drop()
方法刪除整個collection(包括索引)會更有效。
-
僅刪除一個與條件匹配的文檔
刪除指定過濾器匹配的單個文檔,即使匹配到多個文檔
刪除所有指定過濾器匹配的文檔
批量寫入操作
-
MongoDB提供用戶能多批量執行寫入操作。
-
批量寫入操作可以是有序列的,也可以是無序列的。
- 有序列的:
串列操作:如果發生錯誤,將回傳而不處理任何剩餘的操作。
{ordered:true}
- 無序列的:
並行操作:但行為無法保證,如果發生錯誤,將繼續處理剩餘程序。
{ordered:false}