Mongodb xóa tất cả tài liệu

Mongodb đã 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à hoàn toàn phù hợp với Node. Các ứng dụng JS, cho phép bạn viết Javascript cho lớp máy khách, lớp phụ trợ và cơ sở dữ liệu. Bản chất không lược đồ của nó phù hợp hơn với các cấu trúc dữ liệu không ngừng 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 khó có thể bỏ qua. Sử dụng Bộ bản sao để mở rộng quy mô và chúng tôi đang xem xét nền tảng thực sự tuyệt vời để phát triển nhu cầu lưu trữ của bạn hiện tại và trong tương lai

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

npm cài đặt mongodb

hoặc tìm nạp nó từ github tại https. //github. com/mongodb/nút-mongodb-native

Sau khi xử lý xong công việc này, hãy chuyển qua các loại có sẵn cho trình điều khiển và sau đó là cách kết nối với phiên bản Mongo DB của bạn trước khi đối mặt với việc sử dụng một số thao tác CRUD

Kiểu dữ liệu Mongodb¶

Vì vậy, có một điều quan trọng cần lưu ý khi làm việc với Mongodb và đó là sự khác biệt nhỏ về ánh xạ giữa các loại Mongodb hỗ trợ và các loại dữ liệu Javascript gốc. Chúng ta hãy xem các loại được hỗ trợ ngay lập tức và sau đó là cách trình điều khiển quảng cáo các loại để phù hợp với các loại Javascript gốc nhất có thể

  • Float là 8 byte và có thể chuyển đổi trực tiếp thành Số loại Javascript
  • Lớp kép một lớp đặc biệt đại diện cho một giá trị float, điều này đặc biệt hữu ích khi sử dụng các bộ sưu tập được giới hạn khi bạn cần đảm bảo các giá trị của mình luôn là float
  • Số nguyên phức tạp hơn một chút do thực tế là Javascript đại diện cho tất cả các Số dưới dạng 64 bit nổi có nghĩa là giá trị số nguyên tối đa là 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 điều chỉnh giá trị thành 32 bit nếu có thể và tăng giá trị đó lên 64 bit nếu phải. Tương tự, nó sẽ giải tuần tự hóa khi cố gắng khớp nó thành 53 bit nếu có thể. Nếu không thể, nó sẽ trả về một phiên bản Dài để tránh mất độ chính xác
  • Lớp dài một lớp đặc biệt cho phép bạn lưu trữ số nguyên 64 bit và cũng cho phép bạn thao tác trên số nguyên 64 bit
  • Bản đồ ngày trực tiếp tới Ngày Javascript
  • RegExp ánh xạ trực tiếp tới Javascript RegExp
  • Chuỗi ánh xạ trực tiếp tới Chuỗi Javascript (được mã hóa bằng utf8)
  • Lớp nhị phân một lớp đặc biệt cho phép bạn lưu trữ dữ liệu trong Mongodb
  • Lớp mã một lớp đặc biệt cho phép bạn lưu trữ các hàm javascript trong Mongo DB, cũng có thể cung cấp phạm vi để chạy phương thức trong
  • Lớp ObjectID một lớp đặc biệt chứa mã định danh tài liệu MongoDB (tương đương với khóa Chính)
  • Lớp DbRef một lớp đặc biệt cho phép bạn bao gồm một tham chiếu trong tài liệu trỏ đến một đối tượng khác
  • Lớp ký hiệu một lớp đặc biệt cho phép bạn chỉ định một ký hiệu, 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 ký hiệu

Như chúng ta thấy, kiểu số có thể hơi phức tạp do cách triển khai 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 độ phức tạp lên tới 53 bit. Nếu bạn cần xử lý các số nguyên lớn, khuyến nghị là sử dụng lớp Long để thao tác trên các số

Bắt kết nối đó với cơ sở dữ liệu¶

Hãy bắt đầu thiết lập kết nối với cơ sở dữ liệu Mongodb. Nhảy thẳng vào mã, hãy thực hiện kết nối trực tiếp và sau đó xem 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 xem nhanh cách thức hoạt động của mã kết nối. Db. phương thức kết nối, hãy sử dụng một uri để kết nối với cơ sở dữ liệu Mongo, nơi localhost. 27017 là máy chủ lưu trữ và cổng và exampleDb db chúng tôi muốn kết nối với. Sau khi url thông báo hàm băm chứa khóa auto_reconnect. Tự động kết nối lại yêu cầu trình điều khiển thử gửi lại lệnh đến máy chủ nếu có lỗi trong quá trình thực thi

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

poolSize, đ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 quay vòng để gửi và đọc từ kết nối tcp

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

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

Bộ sưu tập tương đương với bảng trong cơ sở dữ liệu truyền thống và chứa tất 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ậy làm thế nào để chúng ta xác định và sử dụng các tập hợ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 đó xem mã

các yêu cầu và các công cụ khởi tạo khác được bỏ qua cho 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 bộ sưu tập nhưng hơi khác nhau về hành vi. Hãy đi qua họ và xem những gì họ làm

db.collection('test', function(err, collection) {});

Chức năng 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 ý {nghiêm ngặt. đúng} tùy chọn. Tùy chọn này sẽ khiến trình điều khiển kiểm tra xem bộ sưu tập có tồn tại hay không và báo lỗi nếu không

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 bộ sưu tập

db.createCollection('test', {strict:true}, function(err, collection) {});

{nghiêm ngặt. 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ố thao tác CRUD trên dữ liệu

Và sau đó là CRUD¶

Vì vậy, hãy làm quen với các thao tác cơ bản cho Mongodb. Giao thức dây Mongo DB được xây dựng xung quanh 4 thao tác 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 đang vượt lên chính mình. Hãy quay lại và xem phần chèn trước và thực hiện với một số mã

các yêu cầu và các công cụ khởi tạo khác được bỏ qua cho 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) {});

});

Một vài biến thể về chủ đề chèn tài liệu như chúng ta có thể thấy. Để hiểu tại sao điều quan trọng là phải hiểu cách Mongo DB hoạt động trong quá trình chèn tài liệu

Mongodb có các thao tác chèn/cập nhật/xóa không đồng bộ. Điều này có nghĩa là khi bạn đưa ra một thao tác chèn, đó là thao tác cháy và quên trong đó cơ sở dữ liệu không phản hồi với trạng thái của thao tác chèn. Để truy xuất trạng thái của hoạt động, bạn phải đưa ra truy vấn để truy xuất trạng thái lỗi cuối cùng của kết nối. Để giúp nhà phát triển đơn giản hơn, trình điều khiển triển khai {w. 1} tùy chọn để việc 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 đã sửa đổi hoặc xóa

Bây giờ, hãy xem qua các loại phần chèn khác nhau được hiển thị trong đoạn mã trên

collection.insert(doc1);

Tận dụng hành vi không đồng bộ và không cần xác nhận về việc duy trì dữ liệu cho Mongo DB, chúng tôi chỉ cần kích hoạt phần chèn (chúng tôi đang thực hiện phân tích trực tiếp, việc mất một vài bản ghi không thành vấn đề)

________số 8

Tài liệu đó cần phải dán. Sử dụng {w. 1} đảm bảo bạn nhận lại được lỗi nếu tài liệu không được chèn chính xác

collection.insert(lotsOfDocs, {w:1}, function(err, result) {});

Chèn hàng loạt tài liệu với bất kỳ lỗi nào được báo cáo. Điều này hiệu quả hơn nhiều nếu bạn cần chèn các lô tài liệu lớn vì bạn phải chịu ít chi phí hơn

Đúng vậy, đó là những điều cơ bản của phần chèn đã được giải quyết. Chúng tôi có một số tài liệu trong đó nhưng muốn cập nhật chúng vì chúng tôi cần thay đổi nội dung của một trường. Hãy cùng xem một ví dụ đơn giản và sau đó chúng ta sẽ đi sâu vào cách hoạt động của các bản cập nhật Mongo DB và cách thực hiện chúng một cách hiệu quả

các yêu cầu và các công cụ khởi tạo khác được bỏ qua cho 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) {});

});
0

Được rồi, trước khi xem mã, chúng tôi muốn hiểu cách cập nhật tài liệu hoạt động và cách thực hiện hiệu quả. Cách cơ bản nhất và kém hiệu quả nhất là thay thế toàn bộ tài liệu, đây thực sự không phải là cách nên làm nếu bạn chỉ muốn thay đổi một trường trong tài liệu của mình. May mắn thay, Mongo DB cung cấp một tập hợp toàn bộ các thao tác cho phép bạn sửa đổi chỉ một phần tài liệu Tài liệu về thao tác nguyên tử. Về cơ bản được phác thảo dưới đây

  • $inc - tăng một giá trị cụ thể theo một lượng nhất định
  • $set - đặt một giá trị cụ thể
  • $unset - xóa một trường cụ thể (v1. 3+)
  • $push - thêm một giá trị vào một mảng
  • $pushAll - thêm một số giá trị vào một mảng
  • $addToSet - chỉ thêm giá trị vào mảng nếu nó chưa có trong mảng
  • $pop - loại bỏ phần tử cuối cùng trong một mảng
  • $pull - xóa (các) giá trị khỏi một mảng hiện có
  • $pullAll - xóa một số giá trị khỏi một mảng hiện có
  • $rename - đổi tên trường
  • $bit - hoạt động theo bit

Bây giờ các thao tác đã được phác thảo, hãy tìm hiểu các trường hợp cụ thể được hiển thị trong ví dụ 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) {});

});
1

Vì vậy, bản cập nhật này sẽ tì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 đặt giá trị thành 2. Vì chúng tôi đang sử dụng {w. 1} tùy chọn tham số kết quả trong hàm gọi lại sẽ trả về giá trị 1 cho biết 1 tài liệu đã bị sửa đổi bởi câu lệnh cập nhật

// 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

Bản cập nhật này thêm một tài liệu khác vào tài liệu hiện trường trong tài liệu được xác định bởi {mykey. 2} 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 Mongodb

Chúng ta hãy xem thao tác xóa cho trình điều khiển. 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 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) {});

});
3

Hãy xem xét 3 biến thể loại bỏ và chức năng của chúng

// 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

Điều này thúc đẩy thực tế rằng Mongo DB không đồng bộ và nó không trả về kết quả cho thao tác chèn/cập nhật/xóa để cho phép thực thi 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

// 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

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 đã xóa trong biến kết quả

// 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

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¶

Tất nhiên, truy vấ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à Mongodb cũng không ngoại lệ. May mắn thay cho chúng tôi, nó có một giao diện truy vấn phong phú với các con trỏ và gần với các khái niệm SQL để cắt và chia nhỏ các 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 toán tử để chọn từ các truy vấn nâng cao Mongo DB. Có rất nhiều cách để tìm kiếm và cách để giới hạn truy vấn. Hãy 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 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) {});

});
7

Trước khi chúng tôi bắt đầu tách mã, có một điều cần được hiểu, phương thức tìm không thực thi truy vấn thực tế. Nó xây dựng một phiên bản 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ừ Mongodb và giữ trạng thái về trạng thái Con trỏ hiện tại của bạn trên Mongodb. Bây giờ, hãy tách các truy vấn chúng ta có ở đây và xem chúng làm gì

// 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

Truy vấn này sẽ tìm nạp tất cả tài liệu trong bộ sưu tập và trả về chúng dưới dạng một mảng các mục. Hãy cẩn thận với hàm toArray vì nó có thể gây sử dụng nhiều bộ nhớ vì nó sẽ khởi tạo tất cả tài liệu vào bộ nhớ trước khi trả về mảng mục cuối cùng. Nếu bạn có một tập kết quả lớn, bạn có thể gặp vấn đề về bộ nhớ

// 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) {});

});
9

Đâ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 được giải tuần tự hóa, một sự kiện dữ liệu được phát ra. Điều này giữ cho mức sử dụng bộ nhớ lưu trú ở mức thấp khi tài liệu được truyền trực tuyến tới bạn. Rất hữu ích nếu bạn đang đẩy tài liệu ra ngoài qua ổ cắm web 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 nào nữa, trình điều khiển sẽ phát ra sự kiện kết thúc để thông báo cho ứng dụng rằng nó đã hoàn thành

db.collection('test', function(err, collection) {});
0

Đây là chức năng được hỗ trợ đặc biệt để truy xuất chỉ một tài liệu cụ thể mà không cần đối tượng con trỏ

Đó là khá nhiều cho phần giới thiệu nhanh về cách sử dụng cơ sở dữ liệu. Tôi cũng đã bao gồm một danh sách các liên kết đến nơi cần đến để tìm thêm thông tin và cũng là một ứng dụng vị trí thô mẫu mà tôi đã viết bằng express JS và mongo DB