MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Truy vấn tài liệu về các phần tử mảng trong MongoDB bằng Java

Bạn có một tài liệu lồng nhau trong trường hợp này. Tài liệu của bạn có một trường Notification là một mảng lưu trữ nhiều đối tượng con với trường url . Để tìm kiếm trong một trường phụ, bạn cần sử dụng cú pháp dấu chấm:

BasicDBObject query=new BasicDBObject("Notification.url","www.adf.com");

Tuy nhiên, điều này sẽ trả về toàn bộ tài liệu với toàn bộ Notification mảng. Bạn có thể chỉ muốn tài liệu phụ. Để lọc điều này, bạn cần sử dụng phiên bản hai đối số của Collection.find .

BasicDBObject query=new BasicDBObject("Notification.url","www.example.com");
BasicDBObject fields=new BasicDBObject("Notification.$", 1);

DBCursor f = con.coll.find(query, fields);

.$ có nghĩa là "chỉ mục nhập đầu tiên của mảng này được so khớp bởi toán tử tìm"

Thao tác này vẫn sẽ trả về một tài liệu có mảng con Notification , nhưng mảng này chỉ nên chứa mục nhập url == "www.example.com" .

Để duyệt qua tài liệu này bằng Java, hãy làm như sau:

BasicDBList notifications = (BasicDBList) f.next().get("Notification"); 
BasicDBObject notification = (BasicDBObject) notifications.get(0);
String url = notification.get("url");

Nhân tiện: Khi cơ sở dữ liệu của bạn phát triển, bạn có thể sẽ gặp phải các vấn đề về hiệu suất, trừ khi bạn tạo chỉ mục để tăng tốc truy vấn này:

con.coll.ensureIndex(new BasicDBObject("Notification.url", 1));



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB chuyển đổi kiểu chuỗi thành kiểu float

  2. MongoError:không được phép thực thi lệnh {find:app_updates, filter:{key:0.0.1-administrator}, limit:1, batchSize:1, singleBatch:true}

  3. Tạo trang web cửa hàng thực phẩm trực tuyến bằng Angular, NodeJS, Express và MongoDB

  4. Có cách nào để cập nhật nguyên tử hai bộ sưu tập trong MongoDB không?

  5. Máy chủ node.js có cần kết nối internet để chạy không?