Mảng đối tượng MongoDB thành mảng chuỗi

Tôi đang cố lấy danh sách thành viên. Trong mongodb mảng là một danh sách các ObjectIds. Nhưng khi tôi chạy truy vấn thì không tìm thấy gì. Tôi biết ID thực tế là hợp lệ. Có thể có một số người dùng đã bị xóa, nhưng hầu hết trong số họ vẫn tồn tại.
Trên máy chủ của chúng tôi, chúng tôi đang tạo truy vấn bằng Mongoose và nó hoạt động tốt, nhưng tôi không chắc cách thực hiện điều đó ở đây. Có vẻ như các tùy chọn của tôi là chuyển đổi chuỗi thành đối tượng trong truy vấn của người dùng hoặc dữ liệu gốc dưới dạng trình biến đổi sau truy vấn trên nguồn dữ liệu. Tôi đã thử một vài lần, nhưng tôi không chắc liệu mình có đang đi đúng hướng hay không.

Mảng đối tượng MongoDB thành mảng chuỗi

Truy vấn này hoạt động, nhưng truy vấn đó dành cho một người dùng và tôi có thể chỉ định truy vấn đó phải được coi là $oid

Mảng đối tượng MongoDB thành mảng chuỗi

MongoDB là cơ sở dữ liệu NoSQL định hướng tài liệu phân tán và mã nguồn mở phổ biến nhất. Một tài liệu trong MongoDB là một cấu trúc dữ liệu với các đối tượng giống như JSON có các cặp trường và giá trị

Để chèn tài liệu vào bộ sưu tập MongoDB, chúng ta có thể sử dụng các phương thức khác nhau như insert(), insertOne() và insertMany()

Trong hướng dẫn này, chúng ta sẽ thảo luận về cách chèn một mảng bên trong tài liệu MongoDB. Trước tiên, chúng ta sẽ xem xét việc chèn một mảng vào tài liệu bằng truy vấn MongoDB Shell. Sau đó, chúng tôi sẽ sử dụng mã trình điều khiển Java MongoDB

2. Khởi tạo cơ sở dữ liệu

Trước khi chúng ta chuyển sang các truy vấn chèn, trước tiên hãy tạo một cơ sở dữ liệu. Hãy gọi nó là baeldung. Chúng tôi cũng sẽ tạo một bộ sưu tập mẫu có tên sinh viên

use baeldung;
db.createCollection(student);

Với lệnh này, cơ sở dữ liệu baeldung mẫu và bộ sưu tập sinh viên của chúng tôi đã được thiết lập thành công. Chúng tôi sẽ sử dụng những điều này để chứng minh trong tất cả các ví dụ

3. Sử dụng MongoDB Shell

Để chèn một mảng vào một bộ sưu tập bằng MongoDB Shell, chúng ta chỉ cần chuyển mảng đó dưới dạng một loại JSON Array cho shell

db.student.insert({
    "studentId" : "STU1",
    "name" : "Avin",
    "Age" : 12,
    "courses" : ["Science", "Math"]
});

Truy vấn trên chèn một tài liệu với một mảng vào tập hợp sinh viên. Chúng tôi có thể xác minh kết quả bằng cách truy vấn các tài liệu của bộ sưu tập sinh viên bằng cách sử dụng toán tử tìm

db.student.find();

Truy vấn trên trả về tài liệu tuyển tập sinh viên đã chèn

{
    "_id" : ObjectId("631da4197581ba6bc1d2524d"),
    "studentId" : "STU1",
    "name" : "Avin",
    "Age" : 12,
    "courses" : [ "Science", "Math" ]
}

4. Thao tác chèn bằng mã trình điều khiển Java

Trình điều khiển Java MongoDB cung cấp nhiều phương thức tiện lợi khác nhau để giúp chúng tôi chèn tài liệu vào bộ sưu tập

  • insert() – Chèn một tài liệu hoặc nhiều tài liệu vào một bộ sưu tập
  • insertOne() – Chèn một tài liệu vào một bộ sưu tập
  • insertMany() – Chèn nhiều tài liệu vào một bộ sưu tập

Bất kỳ phương pháp nào ở trên đều có thể được sử dụng để thực hiện thao tác chèn trên bộ sưu tập MongoDB

Tiếp theo, hãy đi sâu vào triển khai thao tác chèn mảng bằng Trình điều khiển Java MongoDB. Trình điều khiển Java MongoDB hỗ trợ cả tài liệu DBObject và BSON

5. Sử dụng DBObject

Ở đây, DBObject là một phần của trình điều khiển kế thừa MongoDB, nhưng nó không được dùng trong các phiên bản MongoDB mới hơn

Hãy chèn một tài liệu DBObject với một mảng vào bộ sưu tập sinh viên

BasicDBList coursesList = new BasicDBList();
coursesList.add("Chemistry");
coursesList.add("Science");

DBObject student = new BasicDBObject().append("studentId", "STU1")
  .append("name", "Jim")
  .append("age", 13)
  .append("courses", coursesList);

dbCollection.insert(student);

Truy vấn trên chèn một tài liệu DBObject với một mảng vào tập hợp sinh viên

6. Sử dụng Tài liệu BSON

Tài liệu BSON là cách mới để truy cập tài liệu MongoDB trong Java và được xây dựng với ngăn xếp máy khách mới hơn. May mắn thay, nó cũng dễ sử dụng hơn

 

Trình điều khiển Java cung cấp một tổ chức. con trai. Lớp tài liệu để chèn một đối tượng tài liệu Bson với một mảng vào bộ sưu tập sinh viên

6. 1. Chèn một tài liệu với một mảng

Đầu tiên, hãy chèn một tài liệu có một mảng vào bộ sưu tập bằng phương thức insertOne()

List coursesList = new ArrayList<>();
coursesList.add("Science");
coursesList.add("Geography");

Document student = new Document().append("studentId", "STU2")
  .append("name", "Sam")
  .append("age", 13)
  .append("courses", coursesList);

collection.insertOne(student);

Truy vấn trên chèn một tài liệu với một mảng vào bộ sưu tập sinh viên. Điều quan trọng cần lưu ý là phương thức append(String, Object) của lớp Tài liệu chấp nhận một Đối tượng làm giá trị. Chúng ta có thể chuyển Danh sách của bất kỳ loại Đối tượng nào làm giá trị để chèn nó dưới dạng một mảng vào tài liệu

6. 2. Chèn nhiều tài liệu với một mảng

Hãy chèn nhiều tài liệu với một mảng vào bộ sưu tập bằng phương thức insertMany()

List coursesList1 = new ArrayList<>();
coursesList1.add("Chemistry");
coursesList1.add("Geography");

Document student1 = new Document().append("studentId", "STU3")
  .append("name", "Sarah")
  .append("age", 12)
  .append("courses", coursesList1);

List coursesList2 = new ArrayList<>();
coursesList2.add("Math");
coursesList2.add("History");

Document student2 = new Document().append("studentId", "STU4")
  .append("name", "Tom")
  .append("age", 13)
  .append("courses", coursesList2);

List students = new ArrayList<>();
students.add(student1);
students.add(student2);

collection.insertMany(students);

Truy vấn trên chèn nhiều tài liệu với một mảng vào bộ sưu tập sinh viên

6. 3. Chèn một mảng đối tượng

Cuối cùng, hãy chèn một loại tài liệu mảng Đối tượng vào bộ sưu tập MongoDB

Document course1 = new Document().append("name", "C1")
  .append("points", 5);

Document course2 = new Document().append("name", "C2")
  .append("points", 7);

List coursesList = new ArrayList<>();
coursesList.add(course1);
coursesList.add(course2);

Document student = new Document().append("studentId", "STU5")
  .append("name", "Sam")
  .append("age", 13)
  .append("courses", coursesList);

collection.insertOne(student);

Truy vấn trên chèn nhiều tài liệu với một mảng Đối tượng vào bộ sưu tập sinh viên. Ở đây, chúng tôi đã chèn một tài liệu có danh sách các tài liệu dưới dạng một mảng vào bộ sưu tập. Tương tự, chúng ta có thể xây dựng bất kỳ Đối tượng mảng phức tạp nào và chèn nó vào bộ sưu tập MongoDB

7. Phần kết luận

Trong bài viết này, chúng ta đã thấy nhiều cách khác nhau để chèn tài liệu có đối tượng mảng vào bộ sưu tập MongoDB. Chúng ta đã thảo luận về các trường hợp sử dụng này bằng cách sử dụng cả truy vấn MongoDB Shell cũng như triển khai mã trình điều khiển Java tương ứng

Với mã ổ đĩa Java, trước tiên chúng tôi xem xét việc triển khai bằng cách sử dụng lớp DBObject không dùng nữa. Sau đó, chúng tôi đã học cách triển khai tương tự bằng cách sử dụng lớp Tài liệu BSON mới

Làm cách nào để chuyển đổi chuỗi thành mảng trong MongoDB?

Chia một chuỗi thành một mảng các chuỗi con dựa trên dấu phân cách. $split xóa dấu phân cách và trả về các chuỗi con kết quả dưới dạng các phần tử của một mảng. Nếu không tìm thấy dấu phân cách trong chuỗi, $split trả về chuỗi gốc dưới dạng phần tử duy nhất của một mảng.

Bạn có thể truyền một mảng đối tượng thành một mảng chuỗi trong Java không?

Trong Java 8, chúng ta có thể sử dụng Luồng để chuyển đổi mảng đối tượng thành mảng chuỗi một cách dễ dàng . Ý tưởng đầu tiên là chuyển đổi mảng đối tượng đã chỉ định thành Luồng tuần tự và sau đó sử dụng phương thức toArray() để tích lũy các phần tử luồng thành một mảng chuỗi mới.

Làm cách nào để sử dụng $push trong 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 để khớp giá trị mảng trong MongoDB?

Toán tử $elemMatch khớp với các tài liệu chứa trường mảng có ít nhất một phần tử khớp với tất cả các tiêu chí truy vấn đã chỉ định. Nếu bạn chỉ xác định một điều kiện