Cách lưu trữ mảng trong mongodb bằng nút js

Vài tuần qua chúng tôi đã tập trung vào thiết kế dịch vụ web bằng Node. js với Express. Cho đến giờ chúng ta đã bắt đầu với express, sử dụng EJS để tạo trang web và tạo máy chủ thông báo đẩy. Hôm nay chúng ta sẽ tìm hiểu cách lưu dữ liệu trên dự án nút của bạn bằng cách sử dụng MongoDB

Bài đăng này sẽ giả định rằng bạn đã cài đặt MongoDB trên máy của mình. Kiểm tra trang Cài đặt MongoDB nếu bạn chưa thiết lập

Đầu tiên, hãy tìm hiểu về MongoDB một chút. MongoDB là cơ sở dữ liệu hướng tài liệu. Điều này cho phép bạn chỉ cần đưa bất kỳ JSON nào bạn muốn vào đó. Bạn không phải khai báo cấu trúc bảng như trong SQL. Bạn thậm chí không cần phải khai báo bộ sưu tập của mình. Nếu bạn cố gắng sử dụng một bộ sưu tập không tồn tại, nó sẽ được tạo cho bạn ngay lập tức. Các tài liệu được lưu trữ trong các bộ sưu tập mà bạn xác định, nhưng các tài liệu trong một bộ sưu tập không nhất thiết phải giống nhau. MongoDB cũng có một hệ thống truy vấn tuyệt vời. Hãy tưởng tượng chúng ta muốn lưu trữ thông tin về trái cây. Chúng ta có thể làm như sau

db.fruit.insert({name : "apple", color : ["red", "yellow"], source : "tree"})

Bây giờ chúng tôi có một bộ sưu tập trái cây chứa một loại trái cây. một quả táo. Hãy thêm một số chi tiết

db.fruit.insert({name : "strawberry", color : ["red"], source : "bush"})
db.fruit.insert({name : "orange", color : ["orange"], source : "tree"})

Bây giờ chúng tôi có một quả dâu tây và một quả cam trong bộ sưu tập trái cây của chúng tôi. Để có được tất cả các loại trái cây trong bộ sưu tập của chúng tôi đến từ cây, chúng tôi sẽ làm

db.fruit.find({source : "tree"})

Nếu chúng ta muốn tìm tất cả các loại trái cây có màu đỏ, chúng ta sẽ làm

db.fruit.find({color : "red"})

Và để tìm tất cả các loại trái cây có màu vàng hoặc cam, chúng ta sẽ làm

db.fruit.find({color : {$in : ["yellow", "orange"]}})

Bây giờ táo cũng có thể xanh. Hãy sửa đổi mục Apple của chúng tôi để phản ánh điều đó

db.fruit.update({name : "apple"}, {$push : {color : "green"}})

Có một vài điều thú vị cần lưu ý khi cập nhật tài liệu. Theo mặc định, mongodb sẽ chỉ cập nhật mục nhập đầu tiên mà nó tìm thấy. Bạn có thể đặt tùy chọn đa để buộc nó cập nhật mọi mục khớp với truy vấn. Ngoài ra, hãy lưu ý toán tử $push mà tôi đã đưa vào đối tượng cập nhật. Điều đó nói với mongo rằng nó sẽ thêm một mục vào một mảng trên tài liệu. Nếu bạn rời khỏi đẩy và chỉ cần làm

db.fruit.update({name : "apple"}, {color : "green"})

Bạn sẽ rất thất vọng. Đặt toán tử không cập nhật sẽ thay thế hoàn toàn tài liệu

{
    "color" : "green"
}

Vậy nếu bạn muốn cập nhật một trường không phải là một mảng thì sao?

________số 8_______

MongoDB rất mạnh mẽ và là một kho lưu trữ tài liệu tuyệt vời, nhưng nó thiếu sức mạnh liên kết mà SQL mang lại cho bảng. Bạn có thể nối các tài liệu với nhau bằng trường _id của chúng bằng cách sử dụng điền của MonoDB, nhưng nó không nhanh bằng những gì bạn có thể làm với một vài phép nối SQL. Tôi khuyến khích bạn khám phá MongoDB như một tùy chọn cho cơ sở dữ liệu của mình, nhưng điều quan trọng là cách tiếp cận thiết kế cơ sở dữ liệu của bạn với MongoDB khác với SQL. Hãy chắc chắn kiểm tra tài liệu cho tất cả những gì bạn có thể làm với MongoDB

Vậy làm thế nào để bắt đầu sử dụng Mongo với Node?

Hãy tiếp tục và loại bỏ Mongoskin. Mongoskin là thứ bạn muốn nếu bạn chỉ muốn chạy các lệnh MongoDB cơ bản và không hơn thế nữa. Để bắt đầu, hãy thêm Mongoskin làm phụ thuộc

npm install mongoskin --save

Và sau đó trong nút

db.fruit.insert({name : "strawberry", color : ["red"], source : "bush"})
db.fruit.insert({name : "orange", color : ["orange"], source : "tree"})
0

Mongoskin rất dễ sử dụng và hầu hết các lệnh MongoDB đều được hỗ trợ. Nó có vấn đề của nó, nhưng nếu bạn muốn một cái gì đó đơn giản để kết nối với cơ sở dữ liệu mongo thì không cần tìm đâu xa. Nếu bạn muốn trải nghiệm MongoDB tốt nhất mà bạn có thể tìm thấy với Node, hãy tiếp tục đọc

Đến Mongoose. Như họ nói trên trang web của họ. “Mongoose cung cấp giải pháp đơn giản, dựa trên lược đồ để mô hình hóa dữ liệu ứng dụng của bạn và bao gồm tính năng truyền kiểu, xác thực, xây dựng truy vấn, móc nối logic nghiệp vụ tích hợp sẵn, v.v. ” Mongoose là một niềm vui. Để bắt đầu, hãy thêm Mongoose làm phụ thuộc

db.fruit.insert({name : "strawberry", color : ["red"], source : "bush"})
db.fruit.insert({name : "orange", color : ["orange"], source : "tree"})
1

Thật tuyệt khi MongoDB không cần có các lược đồ, nhưng thật tuyệt khi Mongoose cung cấp chúng cho bạn. Hãy tập hợp một lược đồ cho bộ sưu tập trái cây của chúng tôi

db.fruit.insert({name : "strawberry", color : ["red"], source : "bush"})
db.fruit.insert({name : "orange", color : ["orange"], source : "tree"})
2

Hầu hết các lược đồ trên nên thẳng về phía trước. Tên phải là một chuỗi hoặc Mongoose sẽ xóa thuộc tính khỏi đối tượng trước khi sử dụng nó làm mô hình. Màu phải là một mảng các chuỗi. Nguồn phải là một chuỗi và nếu không có thì Mongoose sẽ tự động đặt nó thành “cây”. Các giá trị mặc định sẽ không được lưu trữ trong cơ sở dữ liệu thực tế, nhưng chúng sẽ được áp dụng khi Mongoose lấy chúng ra. “numberOfColors” ảo sẽ tự động thêm một thuộc tính. Ảo rất tốt cho các thuộc tính có thể được tính toán dựa trên dữ liệu hiện có trên mô hình

Sử dụng mô hình trái cây

db.fruit.insert({name : "strawberry", color : ["red"], source : "bush"})
db.fruit.insert({name : "orange", color : ["orange"], source : "tree"})
3

Các ví dụ trên hầu như không cạo được bề mặt của những gì bạn có thể làm với MongoDB và Mongoose. Tự mình làm và khám phá các khả năng của cơ sở dữ liệu hướng tài liệu được hỗ trợ bởi MongoDB

Làm cách nào để chèn mảng trong MongoDB bằng nút JS?

Để chèn nhiều tài liệu vào một bộ sưu tập trong MongoDB, chúng ta sử dụng phương thức insertMany() . Tham số đầu tiên của phương thức insertMany() là một mảng các đối tượng, chứa dữ liệu bạn muốn chèn.

MongoDB có thể lưu trữ một mảng không?

Một trong những lợi ích của mô hình lược đồ phong phú của MongoDB là khả năng lưu trữ các mảng dưới dạng giá trị trường tài liệu . Lưu trữ mảng dưới dạng giá trị trường cho phép bạn lập mô hình mối quan hệ một-nhiều hoặc nhiều-nhiều trong một tài liệu, thay vì trên các tập hợp riêng biệt như bạn có thể làm trong cơ sở dữ liệu quan hệ.

Làm cách nào để thêm dữ liệu vào mảng MongoDB?

Nếu trường không có trong tài liệu cần cập nhật, $push sẽ thêm trường mảng có giá trị làm thành phần của nó . Nếu trường không phải là một mảng, hoạt động sẽ thất bại. Nếu giá trị là một mảng, $push sẽ thêm toàn bộ mảng dưới dạng một phần tử. Để thêm riêng từng phần tử của giá trị, hãy sử dụng công cụ sửa đổi $each với $push.

Làm cách nào để cập nhật trường mảng trong MongoDB bằng nút js?

Để thực hiện cập nhật trên tất cả các phần tử mảng nhúng của từng tài liệu phù hợp với truy vấn của bạn, hãy sử dụng toán tử vị trí đã lọc $[ ] chỉ định các phần tử mảng phù hợp trong tài liệu cập nhật.