Node.js : การเขียนสคริปต์ติดต่อฐานข้อมูล Mongo
Tags: javascript, mongodb, node
Published: 2019-10-08 11:57:19

บทความนี้จะแนะนำการเขียนสคริปต์ JavaScript ติดต่อกับฐานข้อมูล Mongo ซึ่งจะต้องอาศัยมอดูลในการติดต่อฐานข้อมูล Mongo ในตัวอย่างที่นี่ขอแนะนำมอดูลชื่อ mongodb ซึ่งมีชื่อเดียวกันกับฐานข้อมูลเลย  

เริ่มจากติดตั้งมอดูล mongodb
**npm i mongodb** หรือ **npm install mongodb**


**การติดต่อฐานข้อมูล Mongo**
```javascript
const MongoClient = require('mongodb').MongoClient
const url = 'mongodb://localhost:27017'
const option= { useNewUrlParser: true,useUnifiedTopology: true }
const dbName = 'webphuket'

MongoClient.connect(url,option,(err, client) => {
  if (err) throw err
  
  const mongo = client.db(dbName)
  console.log("Connected successfully to server")
  client.close()
})

```

กำหนดตัวแปร MongoClient เพื่อเรียกใช้มอดูล mongodb
กำหนดตัวแปร url เพื่อกำหนด URLและ port เพื่อติดต่อฐานข้อมูล Mongo
กำหนดตัวแปร dbName เพื่อกำหนดชื่อฐานข้อมูล

จากนั้นติดต่อฐานข้อมูล Mongo ด้วย method ชื่อ connect() 


**การเพิ่มข้อมูล**
```javascript
...
...
  var data = { 
    title : 'Product 1',
    price : 1000
  }
  mongo.collection('products').insertOne(data, (err, r) => {
    console.log('documents inserted  : ',r.insertedCount) 
    client.close()
  })

```
สำหรับการเพิ่มข้อมูลต้องกำหนดข้อมูลเก็บไว้ในตัวแปร data ขอยกตัวอย่างข้อมูลดังนี้ หัวข้อ title ชื่อสินค้า Product 1 และราคาสินค้า price เท่ากับ 1000  เป็นต้น

จากกำหนด Collection ที่ต้องการเพิ่มในตัวอย่างชื่อ products และใช้ method ชื่อ insertOne() เป็นการเพิ่มข้อมูลชุดเดียวกัน

และในกรณีต้องการเพิ่มข้อมูลหลายๆ ชุดในครั้งเดียว ก็สามารถใช้ method ชื่อ insertMany() ได้ดังตัวอย่าง


**การเพิ่มข้อมูลหลายๆ ชุดในครั้งเดียว** 
```javascript
...
...
  var data = [
    { title : 'Product 2', price : 2000},
    { title : 'Product 3', price : 3000},
    { title : 'Product 4', price : 4000}
  ]
  mongo.collection('products').insertMany(data, (err, r) => {
    console.log('documents inserted  : ',r.insertedCount)
    client.close()
  })
...

```


**การแสดงข้อมูล**

สำหรับการแสดงข้อมูลทั้งหมดสามารถทำได้โดยใช้ method ชื่อ find() แล้วยัดข้อมูลล
 Array ซึ่งเราสามารถนำไปใช้งานต่อได้ 

```javascript
...
...
    mongo.collection('products').find().toArray((err, result) => {
        console.log(result)
        client.close()
    })
...
```

ในกรณีต้องการแสดงข้อมูลเฉพาะ ก็สามารถทำได้กำหนดเงื่อนไข เช่น หากต้องการแสดงสินค้าที่มีการราคาเท่ากับ 2000 บาท ก็กำหนดให้แสดงข้อมูลดังนี้


```javascript

    query = { price : 2000 } 
    mongo.collection('products').find(query).toArray((err, result) => {
        console.log(result)
        client.close()
    })
...
```

**การแก้ไขข้อมูล**

ในกรณีต้องการแก้ไขข้อมูล เราสามารถทำได้กำหนดชุดข้อมูลที่ต้องการแก้ไข สามารถกำหนด _id ที่ต้องการแก้ไข { _id : new MongoID.ObjectID('5d9c4eab7e4eda0b7418f0b8')

และกำหนดข้อมูลที่ต้องการแก้ไข 
data = { $set: { price: 5555 }}

แล้วแก้ไขข้อมูลด้วย method ชื่อ updateOne() ซึ่งเป็นการแก้ไข 1 ชุด


```javascript
...
...
    const MongoID = require('mongodb').ObjectID
...
...
    query = { _id : new MongoID.ObjectID('5d9c4eab7e4eda0b7418f0b8') }
    data = { $set: { price: 6000 }}
    
    mongo.collection('products').updateOne(query,data, (err, r) => {
        console.log("document updated")
        
        client.close()
    })
...
```

**การลบข้อมูล**

ในกรณีที่ต้องการข้อมูลสามารถทำได้โดยกำหนด _id ที่ต้องการลบแล้วเรียกใช้ method ชื่อ deleteOne() ดังตัวอย่าง

```javascript
...
...
    const MongoID = require('mongodb').ObjectID
...
...
    query = { _id : new MongoID.ObjectID('5d9c4eab7e4eda0b7418f0b8') }
    
    mongo.collection('products').deleteOne(query,(err, r) => {
        console.log("document deleted")
        
        client.close()
    })
...
})
```

**สรุป**

สำหรับการติดต่อฐานข้อมูล Mongo สามารถใช้งานมอดูลชื่อ mongodb โดยมี method ให้เราเลือกใช้มากมาย ตัวอย่างเช่น insertOne() ,insertMany(), find(), updateOne() , deleteOne() ซึ่งสามารถเข้าไปดูรายละเอียดเพิ่มเติมที่ https://www.npmjs.com/package/mongodb