Tản mạn mongodb
Điểm khác biệt của mongo và RDBMS
MongoDB là một document database, nó lưu trữ JSON như các object. Thay vì trong RDBMS ( ví dụ mysql, sql server, postgreSQL, ... ) chúng ta có các table thì tương đương với một table chúng ta có Collection. Trong table của RDBMS có nhiều row data và trong row có các column thì bên mongo sẽ có documents trong documents sẽ có các field.
Nhờ cách tổ chức nosql mà mongo có được hiệu năng cao, có thể đáp ứng cho đa dạng các hệ thống và dễ dàng để scale.
Trước khi nhìn trình bày cách cài đặt trong nodejs mình nói thêm 1 chút về kiểu dữ liệu mongo sẽ sử dụng :
Kiểu dữ liệu
- String: String trong MongoDB phải là UTF-8 hợp lệ.
- Integer: Số nguyên có thể là 32 bit hoặc 64 bit tùy thuộc vào máy chủ của bạn.
- Boolean
- Double
- Min/ Max keys: Loại này được sử dụng để so sánh giá trị đối với các yếu tố thấp nhất và cao nhất BSON.
- Array
- Timestamp
- Object
- Null
- Symbol
- Date
- Object ID
- Binary data
- Code
- Regular expression
Mongoose là gì?
Mongoose là một lớp mô hình hóa tài liệu đối tượng (ODM) nằm trên đỉnh của Node.Js MongoDB API. BẠn nên dùng nó vì nhiều lợi ích:
- Mình định nghĩa ra các schema trước và sử dụng. như thế sau này khi muốn xem lại các cấu trúc của collection mình cũng xem được và dễ dàng nâng cấp hơn.
- Trong schema còn có các cú pháp ràng buộc ví dụ
required
maxlenght, ... - Khi update có trả về kết quả. điều này sẽ dễ dàng hơn cho lập trình viên.
Cài đặt Mongoose
npm install mongoose dotenv
Mình tạo 1 file dùng cho mục đích gọi kết nối đến mongodb có tên ./app.mongo.connect.js. với nội dung như sau :
const mongoose = require("mongoose")
// mongoose.set('debug', true)
mongoose.set('useFindAndModify', true)
// CONNECTION EVENTS
// When successfully connected
mongoose.connection.on('connected', function () {
console.log('Mongoose default connected ' + process.env.DB_MONGO)
});
// If the connection throws an error
mongoose.connection.on('error', function (err) {
console.log('Mongoose default connection error: ' + err)
});
// When the connection is disconnected
mongoose.connection.on('disconnected', function () {
console.log('Mongoose default connection disconnected')
});
// When the connection is open
mongoose.connection.on('open', function () {
console.log('Mongoose default connection is open')
console.log('===================================')
})
/**
* hàm `myConnection` để file thực thi app.js hoặc bin/www thực thi connection
*/
module.exports.myConnection = () => {
console.log(`Mongoose connecting ${process.env.DB_MONGO}`)
/// connect mongodb
mongoose.connect(process.env.DB_MONGO,
{
useNewUrlParser: true,
useUnifiedTopology: true,
useCreateIndex: true,
useNewUrlParser: true
}
)
}
Chú ý siêu to siêu khổng lồ: coi sửa lại cái đường dẫn kết nối mongodb nha:
process.env.DB_MONGO
// thực ra nó là chuỗi giống vầy :
// mongodb://127.0.0.1:27017/database_ebudezain_exp
Cái database_ebudezain_exp bạn sửa lại đại đi chứ cũng không cần phải tạo db như RDBMS đâu.
Lệnh require
('mongoose') trả về phía trên trả về một đối tượng Singleton. Điều này có nghĩa là lần đầu tiên bạn require
('mongoose'), nó tạo ra một lớp Mongoose và trả lại . Trong các cuộc gọi tiếp theo, nó sẽ trả lại cùng một cá thể đã được tạo và trả lại cho bạn lần đầu tiên. Bạn không cần phải lo nó tạo nhiều connect đến db của bạn.
Mình thích khi app được start thì mới connect vào mongo => sau khi thêm file connect ./app.mongo.connect.js ở trên thì chúng ta cần cho app nodejs có thể chạy hàm myConnection
. Nếu bạn dùng express-generator
thì bạn vào trong bin/www nhúng thêm dòng này :
var dbConnect = require('../app.mongo.connect');
var dotenv = require('dotenv') /// thêm dot env vào hệ thống
dotenv.config() /// load file .env
Thực thi file lúc app listen
// server.listen(port); /// comment lại
server.listen(port, () => {
console.log(`server run: http://localhost:${port}`)
dbConnect.myConnection()
})
;
hình ảnh:
Start app để xem connect thành công không
kết quả:
Ngon lành liền 😄 phần 2 mình hướng đẫn mọi ngừoi dùng schema để làm việc với mongo.