Hướng dẫn nodejs mongodb github - nodejs mongodb github

Ebook: Lập trình Node.js thật đơn giản

Hướng dẫn tự xây dựng ứng dụng từ A - Z

Dự án sách được thực hiện bởi VNTALKING.COM

Nội dung cuốn sách: • Phần 1: Giới thiệu tổng quan về Nodejs. • Phần 2: Giới thiệu về NPM và Express. • Phần 3: Bước đầu tạo web app với Express. • Phần 4: Template Engine. • Phần 5: Giới thiệu MongoDB. • Phần 6: Ứng dụng MongoDB vào dự án. • Phần 7: Tạo tính năng Upload ảnh với Express. • Phần 8: Tìm hiểu Express Middleware. • Phần 9: Refactoring theo mô hình MVC. • Phần 10: Tạo tính năng đăng ký thành viên. • Phần 11: Xác thực với Express Sessions. • Phần 12: Triển khai web app lên server thật
• Phần 1: Giới thiệu tổng quan về Nodejs.
• Phần 2: Giới thiệu về NPM và Express.
• Phần 3: Bước đầu tạo web app với Express.
• Phần 4: Template Engine.
• Phần 5: Giới thiệu MongoDB.
• Phần 6: Ứng dụng MongoDB vào dự án.
• Phần 7: Tạo tính năng Upload ảnh với Express.
• Phần 8: Tìm hiểu Express Middleware.
• Phần 9: Refactoring theo mô hình MVC.
• Phần 10: Tạo tính năng đăng ký thành viên.
• Phần 11: Xác thực với Express Sessions.
• Phần 12: Triển khai web app lên server thật

Yêu cầu

Cuốn sách này mình xây dựng từ những kiến thức nền tảng Node.js từ cơ bản nhất. Nên không cần bạn phải có kiến thức về Node.js. Tuy nhiên, vì Node.js được xây dựng trên ngôn ngữ Javascript nên sẽ tốt hơn nếu bạn đã có kiến thức căn bản về Javascript. Ngoài ra, bạn cũng cần chút hiểu biết về HTML và CSS để dựng giao diện web.
Tuy nhiên, vì Node.js được xây dựng trên ngôn ngữ Javascript nên sẽ tốt hơn nếu bạn đã có kiến thức căn bản về Javascript. Ngoài ra, bạn cũng cần chút hiểu biết về HTML và CSS để dựng giao diện web.

Liên hệ

Nếu có bất kỳ vấn đề gì trong quá trình học, code bị lỗi hoặc không hiểu, các bạn có thể liên hệ với mình qua một trong những hình thức dưới đây:

  • Website: //vntalking.com
  • Fanpage: //facebook.com/vntalking
  • Email:

Một thẻ đã tồn tại với tên chi nhánh được cung cấp. Nhiều lệnh GIT chấp nhận cả tên thẻ và tên chi nhánh, vì vậy việc tạo nhánh này có thể gây ra hành vi bất ngờ. Bạn có chắc là bạn muốn tạo chi nhánh này?

Một thẻ đã tồn tại với tên chi nhánh được cung cấp. Nhiều lệnh GIT chấp nhận cả tên thẻ và tên chi nhánh, vì vậy việc tạo nhánh này có thể gây ra hành vi bất ngờ. Bạn có chắc là bạn muốn tạo chi nhánh này?

Mongo DB đã nhanh chóng phát triển để trở thành một cơ sở dữ liệu phổ biến cho các ứng dụng web và là một phù hợp hoàn hảo cho các ứng dụng Node.js, cho phép bạn viết JavaScript cho lớp khách hàng, phụ trợ và cơ sở dữ liệu. Bản chất sơ đồ của nó phù hợp hơn với các cấu trúc dữ liệu liên tục phát triển của chúng tôi trong các ứng dụng web và hỗ trợ tích hợp cho các truy vấn vị trí là một phần thưởng mà khó có thể bỏ qua. Ném vào các bộ bản sao để mở rộng và chúng tôi đang xem xét nền tảng thực sự tốt đẹp để phát triển nhu cầu lưu trữ của bạn ngay bây giờ và trong tương lai.

Bây giờ để cắm một cách xấu hổ về trình điều khiển của tôi. Nó có thể được tải xuống thông qua NPM hoặc được tìm nạp từ kho GitHub. Để cài đặt qua NPM, hãy làm như sau:

npminstallmongodb install mongodb

Hoặc đi tìm kiếm nó từ GitHub tại //github.com/mongodb/node-mongodb-frid

Khi doanh nghiệp này được chăm sóc, hãy để di chuyển qua các loại có sẵn cho trình điều khiển và sau đó làm thế nào để kết nối với thể hiện DB Mongo của bạn trước khi đối mặt với việc sử dụng một số hoạt động CRUD.

Mongo DB Dữ liệu

Vì vậy, có một điều quan trọng cần ghi nhớ khi làm việc với Mongo DB và đó là sự khác biệt ánh xạ nhẹ giữa các loại hỗ trợ DB Mongo DB và các loại dữ liệu JavaScript bản địa. Hãy để một cái nhìn vào các loại được hỗ trợ ra khỏi hộp và sau đó cách các loại được trình điều khiển quảng bá để phù hợp với các loại JavaScript bản địa càng tốt.

  • Float là 8 byte và có thể chuyển đổi trực tiếp thành số loại JavaScript is a 8 byte and is directly convertible to the Javascript type Number
  • Lớp đặc biệt loại A đại diện cho giá trị nổi, điều này đặc biệt hữu ích khi sử dụng các bộ sưu tập giới hạn nơi bạn cần đảm bảo giá trị của bạn luôn luôn nổi. a special class representing a float value, this is especially useful when using capped collections where you need to ensure your values are always floats.
  • Các số nguyên khó khăn hơn một chút do thực tế là JavaScript đại diện cho tất cả các số là 64 bit floats có nghĩa là giá trị số nguyên tối đa ở mức 53 bit. Mongo có hai loại cho số nguyên, 32 bit và 64 bit. Trình điều khiển sẽ cố gắng phù hợp với giá trị thành 32 bit nếu có thể và quảng bá nó lên 64 bit nếu có. Tương tự như vậy, nó sẽ giảm bớt việc cố gắng phù hợp với nó thành 53 bit nếu có thể. Nếu nó không thể, nó sẽ trả lại một ví dụ dài để tránh mất độ chính xác. is a bit trickier due to the fact that Javascript represents all Numbers as 64 bit floats meaning that the maximum integer value is at a 53 bit. Mongo has two types for integers, a 32 bit and a 64 bit. The driver will try to fit the value into 32 bits if it can and promote it to 64 bits if it has to. Similarly it will deserialize attempting to fit it into 53 bits if it can. If it cannot it will return an instance of Long to avoid losing precision.
  • Lớp Long lớp A đặc biệt cho phép bạn lưu trữ số nguyên 64 bit và cũng cho phép bạn hoạt động trên các số nguyên 64 bit. a special class that lets you store 64 bit integers and also lets you operate on the 64 bit integers.
  • Bản đồ ngày trực tiếp đến ngày JavaScript maps directly to a Javascript Date
  • Regexp ánh xạ trực tiếp vào regexp javascript maps directly to a Javascript RegExp
  • Bản đồ chuỗi trực tiếp vào chuỗi JavaScript [được mã hóa trong UTF8] maps directly to a Javascript String [encoded in utf8]
  • Lớp học hạng A đặc biệt cho phép bạn lưu trữ dữ liệu trong Mongo DB a special class that lets you store data in Mongo DB
  • Code Class A lớp đặc biệt cho phép bạn lưu trữ các chức năng JavaScript trong Mongo DB, cũng có thể cung cấp một phạm vi để chạy phương thức trong a special class that lets you store javascript functions in Mongo DB, can also provide a scope to run the method in
  • Class A ObjectID A đặc biệt giữ một định danh tài liệu MongoDB [tương đương với khóa chính] a special class that holds a MongoDB document identifier [the equivalent to a Primary key]
  • Lớp đặc biệt của DBREF Lớp A cho phép bạn bao gồm một tham chiếu trong một tài liệu trỏ đến một đối tượng khác a special class that lets you include a reference in a document pointing to another object
  • Biểu tượng lớp một lớp đặc biệt cho phép bạn chỉ định một biểu tượng, không thực sự phù hợp với JavaScript nhưng đối với các ngôn ngữ hỗ trợ khái niệm biểu tượng. a special class that lets you specify a symbol, not really relevant for javascript but for languages that supports the concept of symbols.

Như chúng ta thấy loại số có thể là một chút khó khăn do cách thực hiện các số nguyên trong JavaScript. Trình điều khiển mới nhất sẽ thực hiện chuyển đổi chính xác lên đến 53 bit phức tạp. Nếu bạn cần xử lý các số nguyên lớn, khuyến nghị là sử dụng lớp dài để hoạt động trên các số.

Nhận kết nối đó đến cơ sở dữ liệu

Hãy để Lừa có thể thiết lập kết nối với cơ sở dữ liệu Mongo DB. Nhảy thẳng vào mã cho phép kết nối trực tiếp và sau đó nhìn vào mã.

// Retrieve
var MongoClient = require['mongodb'].MongoClient;

// Connect to the db
MongoClient.connect["mongodb://localhost:27017/exampleDb", function[err, db] {
  if[!err] {
    console.log["We are connected"];
  }
}];

Hãy để một cái nhìn nhanh về cách thức hoạt động của mã kết nối. Phương thức DB.Connect cho phép sử dụng URI sử dụng URI để kết nối với cơ sở dữ liệu Mongo, trong đó LocalHost: 27017 là máy chủ máy chủ và cổng và kiểm tra DB mà chúng tôi muốn kết nối. Sau thông báo URL, băm chứa khóa Auto_ReConnect. Tự động kết nối lại bảo người lái xe thử lại gửi lệnh đến máy chủ nếu có lỗi trong quá trình thực hiện.Db.connect method let’s use use a uri to connect to the Mongo database, where localhost:27017 is the server host and port and exampleDb the db we wish to connect to. After the url notice the hash containing the auto_reconnect key. Auto reconnect tells the driver to retry sending a command to the server if there is a failure during its execution.

Một tùy chọn hữu ích khác mà bạn có thể chuyển vào là

POPLINSIZE, điều này cho phép bạn kiểm soát số lượng kết nối TCP được mở song song. Giá trị mặc định cho điều này là 5 nhưng bạn có thể đặt nó cao như bạn muốn. Trình điều khiển sẽ sử dụng chiến lược vòng tròn để gửi và đọc từ kết nối TCP., this allows you to control how many tcp connections are opened in parallel. The default value for this is 5 but you can set it as high as you want. The driver will use a round-robin strategy to dispatch and read from the tcp connection.

Chúng tôi đang chạy và chạy với kết nối với cơ sở dữ liệu. Hãy để tiếp tục và xem xét các bộ sưu tập là gì và cách chúng hoạt động.

Mongo DB và Bộ sưu tập

Bộ sưu tập tương đương với các bảng trong cơ sở dữ liệu truyền thống và chứa tất cả các tài liệu của bạn. Một cơ sở dữ liệu có thể có nhiều bộ sưu tập. Vì vậy, làm thế nào để chúng ta đi về việc xác định và sử dụng các bộ sưu tập. Vâng, có một vài phương pháp mà chúng ta có thể sử dụng. Hãy để nhảy thẳng vào mã và sau đó nhìn vào mã.

các yêu cầu và các công cụ khởi tạo khác được bỏ qua cho sự ngắn gọn

// Retrieve
var MongoClient = require['mongodb'].MongoClient;

// Connect to the db
MongoClient.connect["mongodb://localhost:27017/exampleDb", function[err, db] {
  if[err] { return console.dir[err]; }

  db.collection['test', function[err, collection] {}];

  db.collection['test', {w:1}, function[err, collection] {}];

  db.createCollection['test', function[err, collection] {}];

  db.createCollection['test', {w:1}, function[err, collection] {}];

}];

Ba cách khác nhau để tạo một đối tượng thu thập nhưng hơi khác nhau trong hành vi. Hãy cùng đi qua họ và xem những gì họ làm

db.collection['test', function[err, collection] {}];

Hàm này sẽ không thực sự tạo một bộ sưu tập trên cơ sở dữ liệu cho đến khi bạn thực sự chèn tài liệu đầu tiên.

db.collection['test', {strict:true}, function[err, collection] {}];

Lưu ý tùy chọn {Strict: true}. Tùy chọn này sẽ làm cho trình điều khiển kiểm tra xem bộ sưu tập có tồn tại và đưa ra lỗi nếu không.{strict:true} option. This option will make the driver check if the collection exists and issue an error if it does not.

db.createCollection['test', function[err, collection] {}];

Lệnh này sẽ tạo bộ sưu tập trên cơ sở dữ liệu Mongo DB trước khi trả về đối tượng bộ sưu tập. Nếu bộ sưu tập đã tồn tại, nó sẽ bỏ qua việc tạo ra bộ sưu tập.

db.createCollection['test', {strict:true}, function[err, collection] {}];

Tùy chọn {Strict: true} sẽ khiến phương thức trả về lỗi nếu bộ sưu tập đã tồn tại.{strict:true} option will make the method return an error if the collection already exists.

Với kết nối DB mở và bộ sưu tập được xác định, chúng tôi đã sẵn sàng thực hiện một số hoạt động CRUD trên dữ liệu.

Và sau đó có Crud¶

Vì vậy, hãy để Lừa bị bẩn với các hoạt động cơ bản cho Mongo DB. Giao thức dây DB Mongo được xây dựng xung quanh 4 hoạt động chính chèn/cập nhật/xóa/truy vấn. Hầu hết các hoạt động trên cơ sở dữ liệu thực sự là các truy vấn với các đối tượng JSON đặc biệt xác định hoạt động trên cơ sở dữ liệu. Nhưng tôi đã vượt lên trước mình. Hãy để Lừa quay lại và nhìn vào chèn trước và thực hiện nó với một số mã.insert/update/remove/query. Most operations on the database are actually queries with special json objects defining the operation on the database. But I’m getting ahead of myself. Let’s go back and look at insert first and do it with some code.

các yêu cầu và các công cụ khởi tạo khác được bỏ qua cho sự ngắn gọn

// Retrieve
var MongoClient = require['mongodb'].MongoClient;

// Connect to the db
MongoClient.connect["mongodb://localhost:27017/exampleDb", function[err, db] {
  if[err] { return console.dir[err]; }

  var collection = db.collection['test'];
  var doc1 = {'hello':'doc1'};
  var doc2 = {'hello':'doc2'};
  var lotsOfDocs = [{'hello':'doc3'}, {'hello':'doc4'}];

  collection.insert[doc1];

  collection.insert[doc2, {w:1}, function[err, result] {}];

  collection.insert[lotsOfDocs, {w:1}, function[err, result] {}];

}];

Ba cách khác nhau để tạo một đối tượng thu thập nhưng hơi khác nhau trong hành vi. Hãy cùng đi qua họ và xem những gì họ làm

Hàm này sẽ không thực sự tạo một bộ sưu tập trên cơ sở dữ liệu cho đến khi bạn thực sự chèn tài liệu đầu tiên.insert/update/remove operations. This means that when you issue an insert operation its a fire and forget operation where the database does not reply with the status of the insert operation. To retrieve the status of the operation you have to issue a query to retrieve the last error status of the connection. To make it simpler to the developer the driver implements the {w:1} options so that this is done automatically when inserting the document. {w:1} becomes especially important when you do update or remove as otherwise it’s not possible to determine the amount of documents modified or removed.

Lưu ý tùy chọn {Strict: true}. Tùy chọn này sẽ làm cho trình điều khiển kiểm tra xem bộ sưu tập có tồn tại và đưa ra lỗi nếu không.

Lệnh này sẽ tạo bộ sưu tập trên cơ sở dữ liệu Mongo DB trước khi trả về đối tượng bộ sưu tập. Nếu bộ sưu tập đã tồn tại, nó sẽ bỏ qua việc tạo ra bộ sưu tập.

collection.insert[doc2, {w:1}, function[err, result] {}];

Tùy chọn {Strict: true} sẽ khiến phương thức trả về lỗi nếu bộ sưu tập đã tồn tại.{w:1} option ensure you get the error back if the document fails to insert correctly.

collection.insert[lotsOfDocs, {w:1}, function[err, result] {}];

Với kết nối DB mở và bộ sưu tập được xác định, chúng tôi đã sẵn sàng thực hiện một số hoạt động CRUD trên dữ liệu.

Và sau đó có Crud¶

các yêu cầu và các công cụ khởi tạo khác được bỏ qua cho sự ngắn gọn

// Retrieve
var MongoClient = require['mongodb'].MongoClient;

// Connect to the db
MongoClient.connect["mongodb://localhost:27017/exampleDb", function[err, db] {
  if[err] { return console.dir[err]; }

  var collection = db.collection['test'];
  var doc = {mykey:1, fieldtoupdate:1};

  collection.insert[doc, {w:1}, function[err, result] {
    collection.update[{mykey:1}, {$set:{fieldtoupdate:2}}, {w:1}, function[err, result] {}];
  }];

  var doc2 = {mykey:2, docs:[{doc1:1}]};

  collection.insert[doc2, {w:1}, function[err, result] {
    collection.update[{mykey:2}, {$push:{docs:{doc2:1}}}, {w:1}, function[err, result] {}];
  }];
}];

Ba cách khác nhau để tạo một đối tượng thu thập nhưng hơi khác nhau trong hành vi. Hãy cùng đi qua họ và xem những gì họ làm

  • Hàm này sẽ không thực sự tạo một bộ sưu tập trên cơ sở dữ liệu cho đến khi bạn thực sự chèn tài liệu đầu tiên.
  • Lưu ý tùy chọn {Strict: true}. Tùy chọn này sẽ làm cho trình điều khiển kiểm tra xem bộ sưu tập có tồn tại và đưa ra lỗi nếu không.
  • Lệnh này sẽ tạo bộ sưu tập trên cơ sở dữ liệu Mongo DB trước khi trả về đối tượng bộ sưu tập. Nếu bộ sưu tập đã tồn tại, nó sẽ bỏ qua việc tạo ra bộ sưu tập.
  • Tùy chọn {Strict: true} sẽ khiến phương thức trả về lỗi nếu bộ sưu tập đã tồn tại.
  • Với kết nối DB mở và bộ sưu tập được xác định, chúng tôi đã sẵn sàng thực hiện một số hoạt động CRUD trên dữ liệu.
  • Và sau đó có Crud¶
  • Vì vậy, hãy để Lừa bị bẩn với các hoạt động cơ bản cho Mongo DB. Giao thức dây DB Mongo được xây dựng xung quanh 4 hoạt động chính chèn/cập nhật/xóa/truy vấn. Hầu hết các hoạt động trên cơ sở dữ liệu thực sự là các truy vấn với các đối tượng JSON đặc biệt xác định hoạt động trên cơ sở dữ liệu. Nhưng tôi đã vượt lên trước mình. Hãy để Lừa quay lại và nhìn vào chèn trước và thực hiện nó với một số mã.
  • Một vài biến thể về chủ đề chèn một tài liệu như chúng ta có thể thấy. Để hiểu lý do tại sao nó rất quan trọng để hiểu cách Mongo DB hoạt động trong quá trình chèn tài liệu.
  • Mongo DB có các hoạt động chèn/cập nhật/xóa/xóa không đồng bộ. Điều này có nghĩa là khi bạn phát hành một thao tác chèn của nó và quên hoạt động trong đó cơ sở dữ liệu không trả lời với trạng thái của hoạt động chèn. Để truy xuất trạng thái của hoạt động, bạn phải phát hành truy vấn để truy xuất trạng thái lỗi cuối cùng của kết nối. Để làm cho nó đơn giản hơn cho nhà phát triển, trình điều khiển thực hiện các tùy chọn {W: 1} để điều này được thực hiện tự động khi chèn tài liệu. {W: 1} trở nên đặc biệt quan trọng khi bạn cập nhật hoặc xóa vì nếu không thì không thể xác định số lượng tài liệu được sửa đổi hoặc xóa.
  • Bây giờ, hãy để Lừa đi qua các loại chèn khác nhau được hiển thị trong mã ở trên.
  • Tận dụng hành vi không đồng bộ và không cần xác nhận về sự tồn tại của dữ liệu đối với Mongo DB, chúng tôi chỉ bắn ra phần chèn [chúng tôi đang thực hiện phân tích trực tiếp, mất một vài hồ sơ không quan trọng].

Tài liệu đó cần phải gắn bó. Sử dụng tùy chọn {W: 1} Đảm bảo bạn lấy lại lỗi nếu tài liệu không chèn chính xác.

// Retrieve
var MongoClient = require['mongodb'].MongoClient;

// Connect to the db
MongoClient.connect["mongodb://localhost:27017/exampleDb", function[err, db] {
  if[err] { return console.dir[err]; }

  db.collection['test', function[err, collection] {}];

  db.collection['test', {w:1}, function[err, collection] {}];

  db.createCollection['test', function[err, collection] {}];

  db.createCollection['test', {w:1}, function[err, collection] {}];

}];
0

Phải vì vậy, bản cập nhật này sẽ tìm kiếm tài liệu có trường myKey bằng 1 và áp dụng bản cập nhật cho trường FieldToupDate Cài đặt giá trị thành 2. Vì chúng tôi đang sử dụng tùy chọn {W: 1}, tham số kết quả trong cuộc gọi lại sẽ trả về Giá trị 1 chỉ ra rằng 1 tài liệu đã được sửa đổi bằng câu lệnh Update.mykey equal to 1 and apply an update to the field fieldtoupdate setting the value to 2. Since we are using the {w:1} option the result parameter in the callback will return the value 1 indicating that 1 document was modified by the update statement.

// Retrieve
var MongoClient = require['mongodb'].MongoClient;

// Connect to the db
MongoClient.connect["mongodb://localhost:27017/exampleDb", function[err, db] {
  if[err] { return console.dir[err]; }

  db.collection['test', function[err, collection] {}];

  db.collection['test', {w:1}, function[err, collection] {}];

  db.createCollection['test', function[err, collection] {}];

  db.createCollection['test', {w:1}, function[err, collection] {}];

}];
1

Cập nhật này thêm một tài liệu khác vào tài liệu trường trong tài liệu được xác định bởi {myKey: 2} bằng cách sử dụng thao tác nguyên tử $ PUSH. Điều này cho phép bạn sửa đổi giữ các cấu trúc như hàng đợi trong Mongo DB.docs in the document identified by {mykey:2} using the atomic operation $push. This allows you to modify keep such structures as queues in Mongo DB.

Hãy để một người nhìn vào hoạt động xóa cho người lái. Như trước đây, hãy để bắt đầu với một đoạn mã.

các yêu cầu và các công cụ khởi tạo khác được bỏ qua cho sự ngắn gọn

// Retrieve
var MongoClient = require['mongodb'].MongoClient;

// Connect to the db
MongoClient.connect["mongodb://localhost:27017/exampleDb", function[err, db] {
  if[err] { return console.dir[err]; }

  db.collection['test', function[err, collection] {}];

  db.collection['test', {w:1}, function[err, collection] {}];

  db.createCollection['test', function[err, collection] {}];

  db.createCollection['test', {w:1}, function[err, collection] {}];

}];
2

Hãy để kiểm tra 3 biến thể loại bỏ và những gì họ làm.

// Retrieve
var MongoClient = require['mongodb'].MongoClient;

// Connect to the db
MongoClient.connect["mongodb://localhost:27017/exampleDb", function[err, db] {
  if[err] { return console.dir[err]; }

  db.collection['test', function[err, collection] {}];

  db.collection['test', {w:1}, function[err, collection] {}];

  db.createCollection['test', function[err, collection] {}];

  db.createCollection['test', {w:1}, function[err, collection] {}];

}];
3

Điều này tận dụng thực tế là Mongo DB không đồng bộ và nó không trả về kết quả để chèn/cập nhật/xóa để cho phép thực hiện kiểu đồng bộ. Truy vấn xóa cụ thể này sẽ xóa tài liệu trong đó MyKey bằng 1.insert/update/remove to allow for synchronous style execution. This particular remove query will remove the document where mykey equals 1.

// Retrieve
var MongoClient = require['mongodb'].MongoClient;

// Connect to the db
MongoClient.connect["mongodb://localhost:27017/exampleDb", function[err, db] {
  if[err] { return console.dir[err]; }

  db.collection['test', function[err, collection] {}];

  db.collection['test', {w:1}, function[err, collection] {}];

  db.createCollection['test', function[err, collection] {}];

  db.createCollection['test', {w:1}, function[err, collection] {}];

}];
4

Câu lệnh Xóa này xóa tài liệu trong đó MyKey bằng 2 nhưng vì chúng tôi đang sử dụng {W: 1}, nó sẽ quay lại Mongo DB để lấy trạng thái của thao tác xóa và trả về số lượng tài liệu bị xóa trong biến kết quả.mykey equals 2 but since we are using {w:1} it will back to Mongo DB to get the status of the remove operation and return the number of documents removed in the result variable.

Cái cuối cùng này sẽ xóa tất cả các tài liệu trong bộ sưu tập.

Thời gian để truy vấn

Các truy vấn tất nhiên là một phần cơ bản của việc tương tác với cơ sở dữ liệu và Mongo DB cũng không ngoại lệ. May mắn cho chúng tôi, nó có một giao diện truy vấn phong phú với con trỏ và gần với các khái niệm SQL để cắt và cắt bỏ bộ dữ liệu của bạn. Để xây dựng các truy vấn, chúng tôi có rất nhiều nhà khai thác để lựa chọn từ các truy vấn nâng cao Mongo DB. Có nghĩa đen là hàng tấn cách để tìm kiếm và cách hạn chế truy vấn. Hãy cùng xem xét một số mã đơn giản để xử lý các truy vấn theo những cách khác nhau.

các yêu cầu và các công cụ khởi tạo khác được bỏ qua cho sự ngắn gọn

// Retrieve
var MongoClient = require['mongodb'].MongoClient;

// Connect to the db
MongoClient.connect["mongodb://localhost:27017/exampleDb", function[err, db] {
  if[err] { return console.dir[err]; }

  db.collection['test', function[err, collection] {}];

  db.collection['test', {w:1}, function[err, collection] {}];

  db.createCollection['test', function[err, collection] {}];

  db.createCollection['test', {w:1}, function[err, collection] {}];

}];
5

Hãy để kiểm tra 3 biến thể loại bỏ và những gì họ làm.find method does not execute the actual query. It builds an instance of Cursor that you then use to retrieve the data. This lets you manage how you retrieve the data from Mongo DB and keeps state about your current Cursor state on Mongo DB. Now let’s pick apart the queries we have here and look at what they do.

// Retrieve
var MongoClient = require['mongodb'].MongoClient;

// Connect to the db
MongoClient.connect["mongodb://localhost:27017/exampleDb", function[err, db] {
  if[err] { return console.dir[err]; }

  db.collection['test', function[err, collection] {}];

  db.collection['test', {w:1}, function[err, collection] {}];

  db.createCollection['test', function[err, collection] {}];

  db.createCollection['test', {w:1}, function[err, collection] {}];

}];
6

Điều này tận dụng thực tế là Mongo DB không đồng bộ và nó không trả về kết quả để chèn/cập nhật/xóa để cho phép thực hiện kiểu đồng bộ. Truy vấn xóa cụ thể này sẽ xóa tài liệu trong đó MyKey bằng 1.toArray as it might cause a lot of memory usage as it will instantiate all the document into memory before returning the final array of items. If you have a big resultset you could run into memory issues.

// Retrieve
var MongoClient = require['mongodb'].MongoClient;

// Connect to the db
MongoClient.connect["mongodb://localhost:27017/exampleDb", function[err, db] {
  if[err] { return console.dir[err]; }

  db.collection['test', function[err, collection] {}];

  db.collection['test', {w:1}, function[err, collection] {}];

  db.createCollection['test', function[err, collection] {}];

  db.createCollection['test', {w:1}, function[err, collection] {}];

}];
7

Câu lệnh Xóa này xóa tài liệu trong đó MyKey bằng 2 nhưng vì chúng tôi đang sử dụng {W: 1}, nó sẽ quay lại Mongo DB để lấy trạng thái của thao tác xóa và trả về số lượng tài liệu bị xóa trong biến kết quả.data event is emitted. This keeps the resident memory usage low as the documents are streamed to you. Very useful if you are pushing documents out via websockets or some other streaming socket protocol. Once there is no more document the driver will emit the end event to notify the application that it’s done.

// Retrieve
var MongoClient = require['mongodb'].MongoClient;

// Connect to the db
MongoClient.connect["mongodb://localhost:27017/exampleDb", function[err, db] {
  if[err] { return console.dir[err]; }

  db.collection['test', function[err, collection] {}];

  db.collection['test', {w:1}, function[err, collection] {}];

  db.createCollection['test', function[err, collection] {}];

  db.createCollection['test', {w:1}, function[err, collection] {}];

}];
8

Cái cuối cùng này sẽ xóa tất cả các tài liệu trong bộ sưu tập.

Thời gian để truy vấn

Các truy vấn tất nhiên là một phần cơ bản của việc tương tác với cơ sở dữ liệu và Mongo DB cũng không ngoại lệ. May mắn cho chúng tôi, nó có một giao diện truy vấn phong phú với con trỏ và gần với các khái niệm SQL để cắt và cắt bỏ bộ dữ liệu của bạn. Để xây dựng các truy vấn, chúng tôi có rất nhiều nhà khai thác để lựa chọn từ các truy vấn nâng cao Mongo DB. Có nghĩa đen là hàng tấn cách để tìm kiếm và cách hạn chế truy vấn. Hãy cùng xem xét một số mã đơn giản để xử lý các truy vấn theo những cách khác nhau.

  • Trước khi chúng tôi bắt đầu chọn mã, có một điều cần phải hiểu, phương thức tìm không thực hiện truy vấn thực tế. Nó xây dựng một thể hiện của con trỏ mà sau đó bạn sử dụng để truy xuất dữ liệu. Điều này cho phép bạn quản lý cách bạn truy xuất dữ liệu từ Mongo DB và giữ trạng thái về trạng thái con trỏ hiện tại của bạn trên Mongo DB. Bây giờ, hãy để chọn ra các truy vấn mà chúng ta có ở đây và xem xét những gì họ làm.
  • Truy vấn này sẽ lấy tất cả các tài liệu trong bộ sưu tập và trả lại chúng dưới dạng một loạt các mục. Hãy cẩn thận với chức năng Toarray vì nó có thể gây ra nhiều cách sử dụng bộ nhớ vì nó sẽ khởi tạo tất cả tài liệu vào bộ nhớ trước khi trả lại mảng cuối cùng của các mục. Nếu bạn có một kết quả lớn, bạn có thể gặp vấn đề về bộ nhớ.
  • Đây là cách ưa thích nếu bạn phải truy xuất nhiều dữ liệu để phát trực tuyến, vì dữ liệu bị thu hẹp một sự kiện dữ liệu được phát ra. Điều này giữ cho việc sử dụng bộ nhớ thường trú thấp khi các tài liệu được truyền cho bạn. Rất hữu ích nếu bạn đang đẩy tài liệu ra thông qua WebSockets hoặc một số giao thức ổ cắm phát trực tuyến khác. Khi không còn tài liệu, trình điều khiển sẽ phát ra sự kiện cuối cùng để thông báo cho ứng dụng mà nó đã thực hiện.
  • Đây là chức năng được hỗ trợ đặc biệt để lấy chỉ một tài liệu cụ thể bỏ qua nhu cầu đối tượng con trỏ.

Bài Viết Liên Quan

Chủ Đề