Sử dụng trình điều khiển gốc MongoDB Node.js không có Mongoose


Nguyễn Bình Nguyên
8 tháng trước
Hữu ích 8 Chia sẻ Viết bình luận 0
Đã xem 6460

MongoDB là một cơ sở dữ liệu NoQuery phổ biến. Đây là một cơ sở dữ liệu tài liệu lưu trữ dữ liệu trong các tài liệu linh hoạt, giống như JSON. Nó được xuất bản theo AGPL.  

MongoDB là một cơ sở dữ liệu phân tán ở cốt lõi của nó, vì vậy tính sẵn sàng cao, tỷ lệ ngang và phân phối địa lý được tích hợp và dễ sử dụng.

Bài đăng này là một bài viết đơn giản về cách truy cập MongoDB thông qua Trình điều khiển Mongo Node.js 2.4. Trình điều khiển Node.js cung cấp cả các hoạt động dựa trên lời gọi và dựa trên lời hứa. Tham chiếu API hoàn chỉnh có sẵn trên trang MongoDB .

Sử dụng Mongoose để truy cập MongoDB sẽ thực thi lược đồ nghiêm ngặt và chi phí hiệu năng cho các nỗ lực phát triển của chúng tôi. Nó phá vỡ hiệu năng hoặc tính linh hoạt mà MongoDB cung cấp. Thay vào đó, chúng ta có thể thử sử dụng trình điều khiển Mongo Node.js, cung cấp tất cả các lợi ích về hiệu suất của Mongo. Nó cũng linh hoạt để thêm bất kỳ thuộc tính nào một cách nhanh chóng mà không có bất kỳ thay đổi mã nào, ví dụ: đảm bảo rằng siêu dữ liệu của sản phẩm có các khóa khác nhau.

Là một nhà phát triển JavaScript mới làm quen, tôi bắt đầu tạo các hoạt động cơ bản với lời hứa và chờ đợi và cũng sử dụng các tùy chọn gọi lại mà không cần bất kỳ trợ giúp nào từ bất kỳ thư viện nào.

Hãy bắt đầu bằng cách tạo một dự án với  npm init và cài đặt trình điều khiển MongoDB. 

npm install mongodb@2.2 --save 

Tệp JS MongoDao tương tác và kết nối với MongoDB thực hiện các hoạt động cơ sở dữ liệu, xử lý lỗi và sau đó thực hiện các hoạt động gọi lại.

Tệp app.js, là ứng dụng khách đến tệp dao, sẽ gửi / nhận dữ liệu, gọi các hoạt động DB và nối tất cả các hoạt động theo dòng để thực hiện.

Trước tiên, tệp ứng dụng sẽ tạo  MongoDao đối tượng bằng URL và sau đó kết nối không đồng bộ. Sau khi kết nối thành công, nó kết nối với tên cơ sở dữ liệu được yêu cầu. 

function MongoDao(mongoUri, dbname) {
    var _this = this;
    var options = {
        useNewUrlParser: true
    };
    _this.mongoClient = new MongoClient(mongoUri, options);

    return new Promise(function(resolve, reject) {
        _this.mongoClient.connect(function(err, client) {
            assert.equal(err, null);
            console.log("mongo client successfully connected \n");
            _this.dbConnection = _this.mongoClient.db(dbname);
            resolve(_this);
        });
    });
}

Hoạt động không đồng bộ này được gói gọn trong một lời hứa được thực hiện đồng bộ  await, , sau đó chờ đợi  lời hứa này được thực hiện, như dưới đây.

async function main() {
    mongoDao = await new MongoDao(url, dbName);

    insertFn();
}

main();

Đoạn mã trên cũng gọi một hàm chèn để chuyển tên bộ sưu tập và tài liệu tới  mongoDao

const insertFn = function() {
    //insert and then inserted record will be read
    mongoDao.insertDocument(collectionName, doc, updateFn);
}

Hàm chèn trong MongoDao sẽ chèn tài liệu bằng  insertOne phương thức Mongo Driver và sau đó, thông qua cuộc gọi lại, nó lấy cùng một tài liệu và in nó.

MongoDao.prototype.insertDocument = function(collectionName, doc, callback) {
    var _this = this;
    this.dbConnection.collection(collectionName).insertOne(doc, function(err, result) {
        assert.equal(null, err);
        console.log(" Below doc inserted successfully");
        _this.printDocument(collectionName, doc, callback);
    });
}

Các  printDocument  phương pháp là một phương pháp Dao mà lấy tài liệu và bộ lọc dựa trên doc JSON trôi qua. Nó sẽ in bản ghi và gọi lại, đó là một hàm updaten ( mongoDao.insertDocument(collectionName, doc, updateFn);).

MongoDao.prototype.printDocument = function(collectionName, doc, callback) {
    this.dbConnection.collection(collectionName).find({}).filter(doc)
        .toArray(function(err, docs) {
            console.log(docs[0]);
            console.log("\n");
            callback();
        });
}

Hàm chèn vào thực hiện thao tác chèn và sau đó gọi lại cuộc gọi được cung cấp, mà tôi đã thêm một chức năng cập nhật để cập nhật chính tài liệu đã chèn. 

const updateFn = function() {
    var updateDoc = {
        "$set": {
            "mobile": 9629230494
        }
    };
    mongoDao.updateDocument(collectionName, doc, updateDoc, deleteFn);
}

Trong MongoDao, điều này sẽ gọi  updateOne phương thức API để thực hiện thao tác này và kiểm tra lỗi và sau đó in số lượng bản ghi được cập nhật.

MongoDao.prototype.updateDocument = function(collectionName, doc, updateDocument, callback) {
    var _this = this;
    this.dbConnection.collection(collectionName).updateMany(doc, updateDocument,
        function(err, result) {
            assert.equal(null, err);
            console.log(result.result.ok + " document updated successfully");
            _this.printDocument(collectionName, doc, callback);
            callback();
        });
}

Sau khi tài liệu đã được cập nhật thành công, nó gọi hàm xóa như được hiển thị ở trên ( mongoDao.updateDocument(collectionName, doc, updateDoc, deleteFn);).  Trong hàm xóa, tài liệu có các giá trị khóa được sử dụng để định vị tài liệu được truyền dưới dạng tham số, vì vậy  deleteOne phương thức API sẽ được sử dụng để xóa nó.

MongoDao.prototype.deleteDocument = function(collectionName, doc, callback) {
    this.dbConnection.collection(collectionName).deleteOne(doc, function(err, result) {
        assert.equal(null, err);
        console.log(result.result.ok + " document deleted successfully");
        callback();
    });
}

Phần máy khách gọi phương thức xóa Dao này là hiển nhiên nên đã bị bỏ qua.

Mã làm việc có sẵn ở đường dẫn git dưới đây.

https://github.com/nagappan080810/nodejsmongodb

Nó cũng chứa các tệp khác, vì vậy vui lòng xem hai tệp bên dưới cho các hoạt động này.

  1. mongodao.js - Tất cả các hoạt động cơ sở dữ liệu, xử lý lỗi và gọi các hàm gọi lại.

  2. app.js - Máy khách cho mongodao.js truyền dữ liệu và truy xuất dữ liệu.

Hữu ích 8 Chia sẻ Viết bình luận 0
Đã xem 6460