Skip to content

Nodejs and Mongoose MongoDB ODM

Last updated on April 9, 2016

Mongoose เป็น ODM (Object Document Mapping) ตัวหนึ่งของ Mongodb จริงๆ ก็ไม่ใช่อะไรใหม่ หน้าที่ของมันก็เหมือนกับ ORM ฝั่ง DBMS เลยครับแต่นี่เป็นของ NoSQL และที่เป็น “Object Document Mapping” เพราะว่า MongoDB เป็น NoSQL ที่เก็บข้อมูลแบบ Document Store ซึ่งเป็นรูปแบบหนึ่งของ NoSQL

การทำงานของ Object mapping คือ การสร้าง object ความสัมพันธ์, โครงสร้างของข้อมูลใน database เวลาเรียกใช้ก็เรียกเหมือนการ access class หรือ object ลดการเขียนคำสั่ง SQL หรือคำสั่งสำหรับ query ลง

การใช้งานก็เหมือนกัน ORM คือกำหนด schema, กำหนด model และเรียกใช้งานผ่าน model ซึ่งตอนนี้เราก็ไม่ต้องสนใจแล้วว่าฐานข้อมูลข้างหลังมีโครงสร้างเป็นยังไง

0.Prerequisite

npm install mongoose

เรียก module และ connect database

var mongoose = require('mongoose');

mongoose.connect('mongodb://USER:PASSWD@HOST/DB');
var db = mongoose.connection;

อันนี้เล็กๆ น้อยๆ ใช้ในขั้นตอนการสร้าง schema ซึ่งต้องกำหนด type ให้กับ field ต่างๆ

var Schema = mongoose.Schema;
var ObjectId = Schema.Types.ObjectId;

1.Schema mapping

สมมุติผลมีโครงสร้างของ document ใน db ประมาณนี้

{
	id : ObjectId("1234567890"),
	my_arr : ["a","b","c"],
	my_number : 1,
	my_obj : {
		my_text : "This is an example",
		my_date : ISODate("..."),
	}
}

ก็จะได้ schema ของ document หน้าตาแบบนี้ สังเกตดีๆ มันคือการลอกโครงสร้างและกำหนด type ของข้อมูลนั่นเอง

var mySchema = mongoose.Schema({
	id : ObjectId,
	my_arr : Array,
	my_number : Number,
	my_obj : {
		my_text : String,
		my_date : Date,
	}
});

2.Create object model

สร้าง model ด้วย method model() โดยส่ง parameters เป็น ชื่อ model, ตัวแปร schema ที่สร้างไว้, ชื่อ collection

var MyModel = mongoose.model('MyModel', mySchema, 'my_collection');

3.Query and CRUD

การใช้งานโพสต์นี้ยกตัวอย่างการ query ข้อมูลแล้วกันครับ ใช้ method find() กับ model ที่สร้างไว้ paramers ที่ต้องส่งตามนี้

Model.find(conditions, [fields], [options], [callback])

ตัวอย่างเช่น

MyModel.find({ my_number : 1, my_text : 'some text' }, null, {'limit' : 10}, function(err, docs) {
        // do something
}

parameter ตัวไหนไม่ระบุค่าก็ส่งค่าเป็น null ไปparameter ตัวสุดท้ายเป็น callback ที่รับ parameter เป็น err และ array ของ document (document ของ MongoDB) ที่ query ได้

อ้างอิง

2 Comments

  1. Anonymous Anonymous

    thank you

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.