目錄:

3. [Database][MongoDB] 新增、修改、查詢、刪除操作 1 ( CRUD operation 1 )


前言:

後續這兩個章節,我將簡單介紹mongodb幾個重要項目:
  1. 資料結構(Documents and JSON)
  2. 基本操作指令
  3. CRUD(新增、查詢、修改與刪除的)指令
在mongodb的官方網站上,有詳細的說明與介紹。除此之外,若您已經熟悉SQL語法的開發者或管理者,想要知道目前的Query如何在mongodb使用,在官方網站上也有SQL語法與mongodb與法的對照說明,您可以參考此連結


資料結構:

Mongodb儲存資料的結構稱document,為一種JSON-like(field-value)組合的格式。
與一般關連式資料庫不同,Mongodb是一種無schema(綱要)的資料庫,它的結構是動態的。
如果你曾經使用Json來進行資料的操作,那對於這種field-value資料格式一定不陌生。

何謂field-value型式資料? field-value型式資料就是一個欄位對應一個值的資料格式,
例如: 

  • name : "duran"
  • age : 26
  • isEnable : true
  • group : ["News" , "sports"]

而document是由這些(field-value)組合而成,下列是document的範例:
{
    name : "Duran",
    age : 29,
    status : "B",
    group : ["News", "sports"]
}

而多個document的集合,我們就稱為collections,而在一個mongodb中一個database,包含了許多collections。



基本指令操作:

在開始進入新增、查詢、修改、刪除等指令前,我們簡單說明一些在mongodb命令列(Shell)常用的指令,這會讓你在方便後續的操作。
  • 顯示目前操作的database
    • db
  • 檢視資料庫
    • show dbs
  • 切換資料庫
    • use database
  • 檢視collections
    • show collections
  • 顯示 collections資料筆數
    • db.products.count()

CRUD(1):

  • 在mogodb,一般進行查詢的指令為db.products.find( query ) 與 db.products.findOne( query ) 。
    詳細指令說明如下圖所示:

    範例說明:
    在users的collection中(collection),查詢name為duran(query)  ,顯示name與address欄位(還有id)(projection)  ,只顯示五筆資料 (modifier)
                                                                      
  • 我們下列舉幾個範例操作,讓你藉由回傳結果了解指令用法。
    • db.products.findOne()   //回傳一筆資料
    • db.products.find()  //回傳所有資料
    • db.products.find( { _id : "ac3" } )  //找出_id為ac3的資料


  • Query Operators:
    • $gte (大於等於)
      • db.products.find( { price: {$gte:200 } } )  // 找出price大於等於200的資料
    • $gt   (大於)
      • db.products.find( { price: {$gt:200 } } )  // 找出price大於200的資料
    • $lte  (小於等於)
      • db.products.find( { price: {$lte:200 } } )  // 找出price小於等於200的資料
    • $lt    (小於)
      • db.products.find( { price: {$lt:200 } } )  // 找出price小於200的資料
    • $in   (包含)
      • db.products.find( { type: {$in:["case"]} } ) // type中,含有case的資料
    • $nin (不包含)
      • db.products.find( { type: {$nin:["case"]} } ) // type中,不含有case的資料
    • $or   (或)
      • db.products .find( { $or: [ { price: { $lt: 200 } }, { name: "AC3 Phone"} ] } ) //價格低於200 or 名稱為AC3 Phone資料
    • $not (否)
      • db.products  .find( { price: { $not: { $gt: 200 } } } )  //price不大於200的資料
  • Projection:
    • db.products.find( query, projection )
      • db.products.find( { _id: "ac3" } , { name:1,price:1} )  // 找出_id為ac3的資料,但只顯示_id,name,price三個欄位
  • Modifier:
    • db.products.find( query ).sort( FieldName: 1 or -1 )
      • db.products.find(   { } , { name:1,price:1} ).sort( { price : 1 } ) // 使用price排序(升序)
    • db.products.find( query ).limit( ___ )
      • db.products.find().limit(7)
    • db.products.find( query ).skip( ___ )
      • db.products.find().skip(20).limit(5)
  • Dot Notation
    • Document
    • db.test.find( { "x.a" : 1} )
    • db.test.find( { "y.k.bbb" : "hello"} )

  • Cursor:
    • var cursor = db.test.find();
      cursor.hasNext()
      cursor.next()
    • var cursor = db.test.find(); while( cursor.hasNext() ) printjson( cursor.next() )

參考資料:


--
謝謝!