Mongodb tạo chức năng javascript

Nếu bạn đang làm việc với MongoDB và đang tìm cách sử dụng các thủ tục được lưu trữ, bạn có thể gặp một chút khó khăn khi bắt đầu vì MongoDB không có chính xác tương đương với các thủ tục được lưu trữ nhưng nó cung cấp một tính năng javascript được lưu trữ cung cấp chức năng tương tự. Bạn có thể lưu trữ logic Javascript bên trong một bộ sưu tập đặc biệt và sử dụng logic đó khi cần. Trong bài viết này, chúng tôi sẽ chỉ cho bạn một ví dụ đơn giản về lưu trữ hàm javascript mà bạn có thể sử dụng lại. Bạn sẽ có thể áp dụng những gì bạn học được ở đây vào tình huống cụ thể của bạn. Chúng tôi hy vọng bạn thấy hướng dẫn này hữu ích vì MongoDB chính thức không cung cấp các ví dụ hữu ích. Điều đó đang được nói, hãy nhảy thẳng vào phần hướng dẫn

Nếu bạn đến từ nền tảng SQL nơi bạn biết chính xác cách triển khai các thủ tục được lưu trữ, thì việc sử dụng javascript được lưu trữ MongoDB có thể giống như một chút khởi đầu nhưng chúng tôi thấy nó khá dễ dàng. Trước hết, chúng tôi thấy thật thú vị khi viết các thủ tục được lưu trữ của mình bằng Javascript, thứ đang ngày càng trở nên phổ biến và là bản chất thứ hai đối với hầu hết các nhà phát triển

điều kiện tiên quyết

  • Bạn nên cài đặt và chạy MongoDB
    • Nếu bạn không chạy nó, hãy thử lệnh mongod trong thiết bị đầu cuối của bạn
  • Không bắt buộc nhưng bạn nên có một số kinh nghiệm dòng lệnh trước đó

Cách triển khai Stored Procedure với Stored Javascript

Chúng ta sẽ bắt đầu với ví dụ đúng và đã thử về việc tạo một hàm chỉ đơn giản là cộng hai số với nhau. Nó nhận vào hai đối số và trả về tổng của chúng. Trước tiên, hãy viết hàm bằng javascript đơn giản

hàm sum[x,y] {
    return x+y;
}

Bây giờ, giả sử đây là chức năng mà chúng tôi thường sử dụng trong MongoDB và cuối cùng đã đưa ra quyết định chuyển đổi nó thành một thủ tục được lưu trữ hoặc khi chúng tôi triển khai nó trong MongoDB, javascript được lưu trữ

Chúng tôi lưu trữ Chức năng Javascript ở đâu?

Bạn có thể đã tự hỏi mình "Ok, tôi có chức năng này, nhưng tôi phải đặt nó ở đâu?". MongoDB cung cấp một bộ sưu tập đặc biệt trên mọi cơ sở dữ liệu có tên là system.js nơi bạn có thể đặt các hàm javascript tùy chỉnh của mình

Lưu chức năng bên trong db. hệ thống. bộ sưu tập js

Bây giờ để lưu chức năng thêm của chúng tôi bên trong bộ sưu tập này, chúng tôi sẽ thực hiện thao tác sau trong Mongo Shell

db. hệ thống. js. lưu[{_id. "tổng", giá trị. hàm[x,y] { trả về x+y;}}];

Lưu ý rằng chúng tôi đã chuyển tên hàm vào trường _id và định nghĩa hàm không có tên hàm vào trường value

Khi bạn thực hiện lệnh này, bạn sẽ nhận được phản hồi như bên dưới xác nhận rằng chức năng đã được lưu trong bộ sưu tập

WriteResult[{ "nMatched". 0, "nUpserted". 1, "nSửa đổi". 0, "_id". "Tổng" }]

Bây giờ làm thế nào để tôi sử dụng nó?

Ghi chú. Rất nhiều hướng dẫn sẽ chỉ cho bạn cách sử dụng nó với lệnh eval nhưng eval không được dùng nữa

Bây giờ chúng ta có chức năng được lưu trữ trong bộ sưu tập thích hợp db.system.js, chúng tôi muốn sử dụng chức năng. Trước tiên hãy đặt một số dữ liệu vào một bộ sưu tập để chúng tôi có thể kiểm tra nó

>db. kiểm tra. lưu [{x. 4, y. 2}];
WriteResult[{ "nInserted". 1 }]
>db. kiểm tra. lưu [{x. 4, y. 2}];
WriteResult[{ "nInserted". 1 }]
>db. kiểm tra. lưu [{x. 100, y. 2}];
WriteResult[{ "nInserted". 1 }]

Bây giờ, hãy sử dụng hàm Hàm sum được lưu trữ của chúng ta trong bộ định tính $where để kiểm tra các tài liệu mà x & y cộng lại bằng 6. Chúng ta sẽ nhận được hai tài liệu đầu tiên mà tôi đã chèn lại

> db. kiểm tra. tìm[{$where. "tổng [cái này. x, cái này. y] == 6"}];
{ "_id". ObjectId["5cf698db86d331b7a14adf38"], "x". 4, "y". 2 }
{ "_id". ObjectId["5cf698df86d331b7a14adf39"], "x". 4, "y". 2

Xem tất cả các thủ tục được lưu trữ

Bởi vì điều quan trọng đối với nhà phát triển là xem javascript được lưu trữ nào đã tồn tại, chúng tôi sẽ nhanh chóng chỉ cho bạn cách xem các thủ tục được lưu trữ của bạn. Hãy nhớ rằng db. hệ thống. js chỉ là một tập hợp nên bạn có thể thực hiện lệnh find để xem mọi thứ trong đó

> db. hệ thống. js. tìm[]
{ "_id". "tổng", "giá trị". { "mã số". "hàm [x,y] { return x+y;}" } }

Chúng tôi thấy lệnh trước hơi khó đọc nên chúng tôi sử dụng truy vấn sau để liệt kê các chức năng riêng biệt

> db. hệ thống. js. riêng biệt["_id"];
[ "sum" ]

Sự kết luận

Trong bài viết này, chúng tôi đã chỉ cho bạn cách tạo chức năng tương tự như thủ tục được lưu trữ bằng cách sử dụng javascript được lưu trữ trong MongoDB. Chúng tôi hy vọng bạn coi đây là điểm khởi đầu để sử dụng javascript được lưu trữ giúp bạn tiết kiệm rất nhiều thời gian. Như thường lệ, nếu bạn có bất kỳ nhu cầu nào về cơ sở dữ liệu hoặc đang chuyển sang môi trường sản xuất và muốn người khác xử lý sự phức tạp phát sinh, vui lòng liên hệ với Object Rocket

Hướng dẫn này sẽ giải thích các kỹ thuật được sử dụng để thiết lập Mongo Shell để nó có thể kết nối với MongoDB để chạy mã JavaScript. Shell Mongo là một giao diện tương tác hỗ trợ kết nối JavaScript với MongoDB. Shell Mongo có thể được sử dụng để thực hiện các hoạt động quản trị, bao gồm truy vấn và cập nhật dữ liệu. Giao diện dựa trên văn bản Mongo shell được thiết kế xung quanh JavaScript và do đó có thể chạy mã được lưu trữ trong tệp JavaScript

Điều kiện tiên quyết để sử dụng MongoDB để chạy JavaScript

MongoDB phải được cài đặt và chạy đúng cách để MongoDB chạy JavaScript và vào giao diện Mongo shell. Thực hiện lệnh system.js0 để vào giao diện rồi gõ system.js1 để lấy số phiên bản hiện tại của MongoDB

Cài đặt Mongo Shell trên máy hoặc máy chủ

Mongo Shell nên được bao gồm trong cài đặt mặc định của MongoDB. Nếu nó không hoạt động bình thường, các hướng dẫn bên dưới sẽ giúp ích cho quá trình cài đặt Mongo Shell

Gói Linux cho Mongo Shell là system.js2 và có thể được cài đặt bằng trình quản lý gói distro. Sử dụng trình cài đặt YUM [system.js3] hoặc kho lưu trữ APT [system.js4] cho các bản phân phối dựa trên Debian, chẳng hạn như Ubuntu hoặc Linux Mint cho các bản phân phối Red Hat của Linux. Tham khảo ảnh chụp màn hình sau

Lỗi khi cố gắng kết nối với Mongo Shell

Nếu một “Lỗi. thông báo could not connect to server” xảy ra, hãy khởi động lại dịch vụ MongoDB. Sử dụng lệnh sau cho các hệ thống Linux

dịch vụ sudo mongod khởi động lại

Nếu MongoDB được cài đặt trên macO bằng Homebrew, hãy thực hiện lệnh sau để khởi động lại Phiên bản cộng đồng của MongoDB

dịch vụ bia khởi động lại cộng đồng mongodb

Nếu khởi động lại không khắc phục được sự cố, hãy cài đặt lại Mongo Shell hoặc dịch vụ MongoDB. Tuy nhiên, trước khi thực hiện cài đặt lại, hãy xác nhận rằng MongoDB đã được cấu hình đúng cách. Tệp cấu hình trên macOS thường được đặt tại system.js5 và vị trí mặc định cho tệp trong Linux là system.js6

Sử dụng trình chỉnh sửa dựa trên thiết bị đầu cuối, chẳng hạn như vim hoặc nano hoặc IDE, như Sublime hoặc VS Code, để chỉnh sửa tệp system.js7. Hãy chắc chắn rằng các giá trị cổng và giao diện mạng là chính xác cho máy chủ. Đừng quên dịch vụ phải được khởi động lại để mọi thay đổi có hiệu lực. Sau đây là ảnh chụp màn hình của tệp cấu hình

GHI CHÚ. Tệp cấu hình system.js7 có thể yêu cầu chỉnh sửa, sử dụng các đặc quyền nâng cao của Mongo1 để lưu mọi thay đổi

Có cơ sở dữ liệu MongoDB để kiểm tra mã JavaScript

Phải thiết lập kết nối với cơ sở dữ liệu MongoDB để thực thi tệp JavaScript. Nếu chưa được tạo, hãy sử dụng một trong các cơ sở dữ liệu hệ thống tích hợp sẵn của MongoDB. Điều này bao gồm Mongo2, Mongo3 hoặc Mongo4

CẢNH BÁO. Hãy hết sức thận trọng khi thực thi JavaScript trong khi được kết nối với bất kỳ chương trình nào trong số này vì có thể gây ra thiệt hại không thể khắc phục bằng cách sửa đổi cơ sở dữ liệu hệ thống của MongoDB

Thực thi tệp JavaScript bằng giao diện Mongo Shell

Để chạy tệp JavaScript [phần mở rộng tệp Mongo5] với Mongo Shell, lệnh system.js0 phải được thực thi trong cửa sổ đầu cuối, theo sau là tên miền hoặc địa chỉ IP đang chạy dịch vụ MongoDB. Tên cơ sở dữ liệu có dấu gạch chéo, e. g. Mongo7, phải được viết là phần cuối cùng của lệnh trong tên tệp JavaScript

Dưới đây là ví dụ về cách sử dụng Mongo Shell để thực thi tệp JavaScript có tên là Mongo8

mongo 127. 0. 0. 1. 27017/config mongo-test. js

GHI CHÚ. Nếu đường dẫn thư mục giống như tệp chưa được thiết lập, đường dẫn tuyệt đối cùng với tên tệp phải được chỉ định. Ví dụ: Mongo9 là địa chỉ IPv4 cho máy chủ localhost, nhưng lưu ý rằng tên miền system.js00 có thể được sử dụng riêng

Ngoại lệ 'Bảng điều khiển không được xác định' khi thực thi Javascript với MongoDB

Không giống như JavaScript chạy trong trình duyệt web hoặc trong Nút. js, môi trường Mongo Shell cho JavaScript không sử dụng đối tượng bảng điều khiển để in hoặc đăng nhập vào thiết bị đầu cuối hoặc cửa sổ nhắc lệnh

Sử dụng print[] hoặc printjson[] để gỡ lỗi JavaScript trong Mongo Shell

Không thể sử dụng hàm system.js01 JavaScript trong khi thực thi mã với Mongo Shell. Điều này cũng đúng với hàm system.js02 cũng như đối tượng JavaScript “Document” chỉ tồn tại đối với JavaScript chạy trên trình duyệt

Lưu ý rằng một thay thế Mongo Shell cho Bảng điều khiển và Tài liệu là các hàm system.js03 và system.js04

Tạo tệp JavaScript cho MongoDB

Một ví dụ JavaScript và Mongo Shell cơ bản của Hello Hello World sau đây

myJson = {"xin chào". "thế giới"};
printjson[myJson];

Kết quả của đoạn mã trên sẽ giống như sau

Sử dụng hàm load[] của Mongo Shell để nhập tệp JavaScript

Hàm system.js05 tích hợp sẵn của Mongo Shell có thể được sử dụng để nhập mã JavaScript được lưu trữ trong một tệp khác bằng cách chuyển đường dẫn và tên tệp của tệp khác cho hàm tải. Nối mã sau vào tệp Mongo8 được sử dụng trước đó

var load Successful = load["test-mongodb/test. js"];
print ["\n\nloadSuccessful. ", loadSuccessful];

Bây giờ hãy tạo một tệp JavaScript khác trong một thư mục khác như sau

kiểm tra mkdir-mongo; . "Tôi đến từ một tệp khác"};printjson[ anotherJson ];' . js

Khi tệp Mongo8 ban đầu được thực thi lại, nó sẽ in các kết quả sau trong cửa sổ đầu cuối

Phiên bản máy chủ MongoDB. 4. 2. 1
{ "xin chào". "thế giới" }
{ "thông báo". "Tôi đến từ một tệp khác" }
loadSuccessful. đúng

GHI CHÚ. Nếu hàm system.js05 không thể tìm thấy tệp, nó sẽ đưa ra một ngoại lệ system.js09. Tuy nhiên, nếu chức năng tải thành công, nó sẽ trả về phản hồi system.js10

Kết nối với MongoDB trong tệp JavaScript

Tạo một phiên bản kết nối mới cho MongoDB bằng cách thực hiện lệnh gọi phương thức system.js11 sau

// Kết nối với MongoDB
conn = new Mongo[];

Tạo một đối tượng Con trỏ cho bộ sưu tập MongoDB trong JavaScript

Đoạn mã sau khai báo một đối tượng cơ sở dữ liệu mới bằng cách sử dụng phiên bản máy khách system.js11

// Kết nối với MongoDB
conn = new Mongo[];

// Tạo phiên bản cơ sở dữ liệu
db = conn. getDB["some_db"];

Tiếp theo, gọi phương thức system.js13, như được hiển thị bên dưới, để tạo một đối tượng Con trỏ chứa tất cả các tài liệu MongoDB trong một trong các bộ sưu tập cơ sở dữ liệu

// Tạo một thể hiện con trỏ
cursor = db. getCollection["Bộ sưu tập của tôi"]. find[];
print ["\ncon trỏ. ", Sự vật. phím[con trỏ]];

Lặp lại bộ sưu tập MongoDB bằng JavaScript

Lặp lại các tài liệu của đối tượng Con trỏ, được trả về từ truy vấn system.js13, bằng cách thực thi trình lặp system.js15 của JavaScript trong vòng lặp while

Mã bên dưới được sử dụng để lặp lại các tài liệu và in ra các trường và giá trị tương ứng

// Lặp lại đối tượng Con trỏ
while[con trỏ. hasNext[]] {
item = con trỏ. next[];
keys = Đối tượng. keys[item];
print["\nMongoDB doc keys. ", phím];

// Lặp lại các trường tài liệu MongoDB
for [i=0; i-keys. chiều dài; . ", trường, "---", mục[keys[i]]];
let field = keys[i];
print["field:", field, "---", item[keys[i]]];
}
}

Kết quả sẽ giống như ảnh chụp màn hình sau

Kết luận sử dụng MongoDB để chạy JavaScript

Hướng dẫn này trình bày các kỹ thuật được sử dụng để kết nối với Mongo shell để nó có thể lần lượt kết nối với MongoDB để chạy mã JavaScript. Bài viết giải thích cách cài đặt Mongo Shell và cách xử lý lỗi có thể xảy ra trong quá trình kết nối. Hướng dẫn cũng trình bày cách thực thi tệp JavaScript bằng giao diện Mongo Shell, sử dụng hàm print[] hoặc printjson[] để gỡ lỗi JavaScript trong Mongo Shell, cách tạo tệp JavaScript cho MongoDB, cách sử dụng tải[] của Mongo Shell. . Hãy nhớ hết sức cẩn thận khi thực thi JavaScript với bất kỳ cơ sở dữ liệu hệ thống tích hợp nào của MongoDB vì có thể gây ra thiệt hại không thể khắc phục đối với các tệp

Chúng ta có thể tạo chức năng trong MongoDB không?

Bạn có thể tạo các chức năng tùy chỉnh bổ sung để đọc, chèn, cập nhật và xóa dữ liệu khỏi MongoDB của mình bằng Trình chỉnh sửa chức năng .

Tôi có thể sử dụng JavaScript với MongoDB không?

MongoDB hỗ trợ JavaScript thông qua Node chính thức. trình điều khiển js . Bạn có thể kết nối Nút của mình. js sang MongoDB và làm việc với dữ liệu của bạn.

Chúng tôi có thể lưu trữ chức năng trong MongoDB không?

Không lưu trữ logic ứng dụng trong cơ sở dữ liệu . Có những hạn chế về hiệu suất khi chạy JavaScript bên trong MongoDB.

Chủ Đề