Mongodb chèn mảng tài liệu con

Tài liệu nhúng (Tài liệu nhúng) là tài liệu có lược đồ riêng và là 1 phần của các tài liệu khác. Hiểu đơn giản thì các tài liệu nhúng là 1 trường nằm trong 1 bộ sưu tập thay vì kiểu lưu dữ liệu References ta phải thiết kế 2 bộ sưu tập để có thể hiện mối quan hệ One-to-Many

Tài liệu nhúng có mọi đặc điểm như 1 kiểu, ta có thể sử dụng trình xác thực, phần mềm trung gian,. to handle error when doing work with this data type

Trong Mongoose, Tài liệu nhúng được khai báo dưới dạng mảng trong bộ sưu tập chứa nó và như nói về phía trên, nó sẽ có 1 lược đồ riêng nhưng nằm trong cùng 1 tệp với bộ sưu tập chính

Ví dụ. Ta cần quản lý các Sinh viên và mỗi sinh viên sẽ có nhiều Dự án khác nhau. Khi này ta sẽ có 1 file chứa lược đồ như sau

var Projects = new Schema({
  title: String,
  unit: String
})


var Student = new Schema({
  name: String,
  age: Number,
  projects: [Projects]
})

mongoose.model('Student', Student);

Ta có thể tìm thấy cặp khóa-giá trị dự án. [Dự án] trong Lược đồ Sinh viên, giá trị là 1 mảng đặc biệt có các phương thức cụ thể để làm việc với Tài liệu nhúng và mảng này là một thể hiện của DocumentArray. At the other key-value, value is 1 data type is known as available. Ta cần định nghĩa cho DocumentArray này bằng 1 lược đồ riêng

Lưu ý. Lược đồ con luôn phải được xác định trước lược đồ chính

2. So sánh Tài liệu nhúng với Tài liệu tham khảo

Trước khi so sánh giữa 2 kiểu mô hình dữ liệu, ta xem qua ví dụ hướng về khi sử dụng kiểu References, thì xây dựng lược đồ như thế nào đã có nhé.

Ta có 2 tập tin. Dự định. js và Student. js

//Project.js
var Project = new Schema({
  title: String,
  unit: String,
  student: { type:Schema.ObjectId, ref: "Student" }
});

mongoose.model('Project', Project);
//Student.js
var Student = new Schema({
  name: String,
  age: Number
});

mongoose.model('Student', Student);

References save các mối quan hệ giữa dữ liệu bằng cách liên kết từ bộ sưu tập này sang bộ sưu tập khác ( tạo tham chiếu đến anh cha) thông qua ObjectIds. Tại đây, nếu ta có một bản dữ liệu trong từng Student thì ta lưu ObjectID của Student trên từng Project. Thuộc tính tham chiếu phải khớp chính xác với tên mô hình trong định nghĩa mô hình của chúng tôi

Cơ bản thì cách sử dụng 2 mô hình dữ liệu này trong Mongoose là như vậy. Mỗi ưu điểm, nhược điểm khác nhau

Tài liệu nhúngTài liệu tham khảoƯu điểm- Truy vấn và cập nhật dữ liệu dễ dàng.
- Đạt hiệu suất cao khi đọc dữ liệu- Có thể cung cấp linh hoạt hơn với truy vấn.
- Đạt hiệu suất cao trong việc ghi dữ liệuNhược điểm- Kích thước tài liệu ảnh hưởng lớn đến việc ghi dữ liệu vì mỗi tài liệu không vượt quá 16MB- Với các hệ thống có nhiều bộ sưu tập thì truy cập

Bài viết này nói về Tài liệu nhúng nên chúng ta sẽ tiếp tục với các thao tác cơ bản của mô hình dữ liệu này

3. Thêm 1 Embedded Document vào 1 mảng

// retrieve my model
var Student = mongoose.model('Student');

// create a student
var student = new Student({ name: 'Cao Thanh Sang', age: 23 });

// create a project
student.projects.push({ title: 'Project 1', unit: 'NodeJs' });

student.save(function (err) {
    if (err) {
        console.log(err);
    } else {
        console.log('Success!');
    }
});

4. Xóa 1 tài liệu nhúng

Student.findById(myId, function (err, student) {
    if (err) {
        console.log(err)
    } else {
        student.projects[0].remove();
        student.save(function (err) {
            // do something
        });
    };
});

5. Tìm tài liệu nhúng theo id

DocumentArrays có phương thức đặc biệt là id() để lọc các Embedded Document theo thuộc tính _id của chúng

student.projects.id(my_id).remove();
student.save(function (err) {
    // embedded project with id `my_id` removed!
});

Bài viết đến đây là kết thúc rồi. Mình xin cảm ơn các bạn đã đọc bài. Nếu có sai sót hoặc cách diễn đạt của mình sai thì hãy comment phía bên dưới nhé

Nhưng lộn xộn như không hoạt động, không có lỗi nhưng nó không bị xóa, tôi chỉ muốn trả lại tài liệu này cho người dùng. nó không bị xóa, tôi chỉ muốn trả lại tài liệu này cho người dùng

{
     username: "user",
     contacts: [{'id':ObjectId('534.....etc'), 'approved': false}]
    }

Làm thế nào để đạt được điều này?

Cách xóa tài liệu phụ MongoDB với các ví dụ về mã

Trong phiên bản này, chúng tôi sẽ cố gắng giải quyết cách xóa câu đối với MongoDB Subdocument bằng cách sử dụng ngôn ngữ máy tính. Mã theo sau phục vụ như một minh họa của điểm này

db.getCollection('products').update({}, 
{$pull: {reviews:
{user: ObjectId("5f6e2e0b70eb0208fc84011a")}}},
{multi: true})

Chúng tôi đã có thể hiểu cách sửa chữa cách xóa vấn đề Subdocument MongoDB nhờ nhiều ví dụ

Làm cách nào để xóa một mục trong MongoDB?

Shell MongoDB cung cấp các phương pháp sau để xóa tài liệu khỏi bộ sưu tập

  • Để xóa nhiều tài liệu, hãy sử dụng DB. thu thập. xóa nhiều ()
  • Để xóa một tài liệu duy nhất, hãy sử dụng DB. thu thập. Xóa ()

Làm cách nào để xóa dữ liệu lồng nhau trong MongoDB?

Để loại bỏ một phần tử khỏi một mảng được lồng gấp đôi trong tài liệu MongoDB, bạn có thể sử dụng toán tử $ drag. Bây giờ trường "userzipcode". "20010" đã bị xóa khỏi một khoảng được gấp đôi. 30-JUL-2019

Làm cách nào để xóa toàn bộ một mảng trong MongoDB?

Toán tử Pull $ sẽ loại bỏ khỏi một mảng hiện có tất cả các phiên bản của giá trị hoặc giá trị phù hợp với một điều kiện được chỉ định. Toán tử Kéo $ có biểu mẫu. {$ kéo. {. ,,,}} để chỉ định một trong tài liệu nhúng hoặc trong một mảng, sử dụng ký hiệu dấu chấm

Tài liệu con trong MongoDB là gì?

Trong Mongoose, Subdocument là các tài liệu được lồng trong các tài liệu khác. Bạn có thể phát hiện ra một Tài liệu phụ khi một lược đồ được lồng tiếng trong lược đồ khác. Lưu ý. MongoDB gọi các tài liệu nhúng Subdocument. 22-JAN-2020

Làm cách nào để xóa một bộ dữ liệu?

Để xóa toàn bộ bộ dữ liệu, chọn tùy chọn tệp dữ liệu (tùy chọn 2). Bảng điều khiển tiếp theo bạn thấy cho phép bạn thực hiện một số tác vụ quản lý tệp dữ liệu. To delete file data, please enter D to delete on the option line

Làm cách nào để xóa một mục khỏi danh sách?

Toán tử DEL xóa mục hoặc phần tử tại vị trí mục được chỉ định từ danh sách, nhưng mục đã loại bỏ không được trả lại, vì nó là với phương thức pop (). Có ba cách mà bạn có thể xóa các phần tử khỏi danh sách

  • Use method Remove()
  • Use method pop() of object
  • Sử dụng toán tử DEL

Làm cách nào để xóa một danh sách lồng nhau?

Loại bỏ các mục khỏi một danh sách lồng nhau. Nếu bạn biết chỉ mục của mục bạn muốn, bạn có thể sử dụng phương thức pop(). Nó sửa đổi danh sách và trả về mục đã xóa. Nếu bạn không cần phải loại bỏ giá trị bị loại bỏ, hãy sử dụng lệnh DEL

Clear soft in MongoDB là gì?

Delete the soft has mean is setting flags on the document to đánh dấu tài liệu đã bị xóa, thay vì thực sự xóa tài liệu. 07-AUG-2022

Làm cách nào để xóa nhiều bộ sưu tập trong MongoDB?

Trong MongoDB, bạn được phép xóa các tài liệu hiện có khỏi bộ sưu tập DB. thu thập. Phương thức deletemany(). Phương pháp này xóa nhiều tài liệu khỏi bộ sưu tập theo bộ lọc. 27-THÁNG 2-2020

Làm thế nào để bạn xóa toàn bộ một mảng?

Để xóa phần tử của mảng bằng phương thức Remove (), trước tiên, chúng ta phải chuyển đổi mảng thành một mảng danh sách. Khi mảng được chuyển đổi thành một danh sách mảng, thì chúng ta có thể sử dụng phương thức xóa () của lớp ArrayList để xóa các phần tử của mảng