MongoDB tìm danh sách id Java

Tìm hiểu cách tìm tài liệu trong MongoDB. Hướng dẫn tìm tài liệu mongodb này bao gồm một số cách để truy vấn một tài liệu hoặc tìm nhiều tài liệu dựa trên cùng một điều kiện như chúng ta làm trong SQL bằng cách sử dụng KHOẢN WHERE

Table of Contents

1) Select all documents from a collection
2) Select first document from a collection
3) Select single document and limited field(s) from a collection
4) Select all documents with unique id from a collection
5) Document ids IN clause example
6) Document ids less than or greater than clause example
7) Document ids NOT IN clause example
8) Documents matching multiple fields example
9) Documents matching field value to some REGEX example

MongoDB tìm tài liệu – chuẩn bị dữ liệu thử nghiệm

Đối với các ví dụ xây dựng và chạy được sử dụng trong hướng dẫn này, tôi đã điền 20 tài liệu nhân viên vào cơ sở dữ liệu với

private static void selectAllRecordsFromACollection(DBCollection collection) 
{
    DBCursor cursor = collection.find();
    while(cursor.hasNext())
    {
        System.out.println(cursor.next());
    }
}
1 từ 1 đến 20 và
private static void selectAllRecordsFromACollection(DBCollection collection) 
{
    DBCursor cursor = collection.find();
    while(cursor.hasNext())
    {
        System.out.println(cursor.next());
    }
}
2 từ TestEmployee_1 đến TestEmployee_10

điểm. 50

câu trả lời được chấp nhận

Bằng cách chạy xóa một lần cho mỗi ID hoặc có thể sử dụng trong

db.collection.remove( { _id : { $in: [
    ObjectId("51ee3966e4b056fe8f074f48"), 
    ObjectId("51ee3966e4b056fe8f074f4a"), 
    ObjectId("51ee3966e4b056fe8f074f4b") 
] } } );

điểm. 19

Bạn có thể thực hiện việc này bằng cách sử dụng lệnh deleteMany

const objects = [
    ObjectId("51ee3966e4b056fe8f074f48"), 
    ObjectId("51ee3966e4b056fe8f074f4a"), 
    ObjectId("51ee3966e4b056fe8f074f4b") 
];

db.collection.deleteMany({_id: { $in: objects}});

Thêm câu hỏi với thẻ tương tự


Tất nhiên sẽ ngày càng có nhiều vấn đề hơn khi số id bạn sử dụng trong truy vấn $in tăng lên. Chúng tôi đã trải qua một số sự gia tăng đáng kể về thời gian thực hiện truy vấn với các mảng vài nghìn id

Bạn có thể xem có bao nhiêu tài liệu đang được quét trong khi thực hiện truy vấn của mình bằng cách sử dụng chức năng trong trình bao MongoDB (hoặc sử dụng truy vấn được bao bọc)

{"$query" : {"foo" : "bar"}, "$explain" : true}

Số lượng tài liệu được quét phải càng gần với số lượng tài liệu được trả lại càng tốt

Chỉ là một lưu ý chung có thể hữu ích cho những người khác - đôi khi bạn không thực sự cần truy vấn $in. Nếu bạn đảo ngược quan hệ một thành nhiều, bạn có thể đơn giản hóa truy vấn. Ví dụ muốn tìm bài hát được người dùng thích thì thay vì có cấu trúc như sau

user :
{
    'likes' : [
        ObjectId(song_id1),
        ObjectId(song_id2),
        ...
    ]
}

bạn có thể có

song :
{
    'likedBy' : [
        ObjectId(user_id1),
        ObjectId(user_id2),
        ...
    ]
}

sau đó bạn chỉ có thể truy vấn các bài hát mà {'likedBy' : ObjectId(yourUserId)} (MongoDB sẽ tìm kiếm id trong mảng). Tất nhiên, nó phụ thuộc vào tình huống và ví dụ này không đáng kể, nhưng đôi khi bạn có thể tăng tốc độ truy vấn lên rất nhiều bằng cách đảo ngược mối quan hệ và có thể thêm một số dự phòng dữ liệu

điểm. 2

Trường _id được lập chỉ mục theo mặc định nên truy vấn IN sẽ rất nhanh, ngay cả khi nó khớp với nhiều bản ghi

Trong hướng dẫn này, chúng ta sẽ xem xét việc thực hiện các thao tác truy vấn bằng cách sử dụng ID tài liệu trong MongoDB. MongoDB cung cấp một toán tử tìm để truy vấn tài liệu từ một bộ sưu tập

Trong hướng dẫn này, trước tiên chúng ta sẽ xem xét truy vấn tài liệu bằng cách sử dụng ID Tài liệu trong truy vấn MongoDB Shell và sau đó sử dụng mã trình điều khiển Java

2. ID tài liệu của tài liệu MongoDB là gì?

Cũng giống như bất kỳ hệ thống quản lý cơ sở dữ liệu nào khác, MongoDB yêu cầu một mã định danh duy nhất cho mỗi tài liệu được lưu trữ trong một bộ sưu tập. Mã định danh duy nhất này hoạt động như một khóa chính cho bộ sưu tập

Trong MongoDB, ID bao gồm 12 byte

  • dấu thời gian 4 byte thể hiện việc tạo ID được tính bằng giây kể từ kỷ nguyên Unix
  • giá trị được tạo ngẫu nhiên 5 byte dành riêng cho máy và quy trình
  • bộ đếm tăng dần 3 byte

Trong MongoDB, ID được lưu trữ trong trường có tên _id và được tạo bởi máy khách. Do đó, ID nên được tạo trước khi gửi tài liệu đến cơ sở dữ liệu. Về phía khách hàng, chúng tôi có thể sử dụng ID do trình điều khiển tạo hoặc tạo ID tùy chỉnh

Mã định danh duy nhất được lưu trữ trong lớp ObjectId. Lớp này cung cấp các phương thức thuận tiện để lấy dữ liệu được lưu trữ trong ID mà không thực sự phân tích cú pháp nó. MongoDB sẽ thêm trường _id và gán một ObjectId duy nhất cho tài liệu nếu _id không được chỉ định trong khi chèn tài liệu

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

Đầu tiên, hãy thiết lập cơ sở dữ liệu mới baeldung và bộ sưu tập mẫu, phương tiện

use baeldung;
db.createCollection("vehicle");

Hơn nữa, hãy thêm một vài tài liệu vào bộ sưu tập bằng cách sử dụng phương thức insertMany

________số 8_______

Trong trường hợp chèn thành công, lệnh trên sẽ in ra một JSON tương tự như hình bên dưới

{
    "acknowledged" : true,
    "insertedIds" : [
        ObjectId("62d01d17cdd1b7c8a5f945b9"),
        ObjectId("62d01d17cdd1b7c8a5f945ba"),
        ObjectId("62d01d17cdd1b7c8a5f945bb")
    ]
}

Chúng tôi đã thiết lập thành công cơ sở dữ liệu và bộ sưu tập. Chúng tôi sẽ sử dụng cơ sở dữ liệu và bộ sưu tập này cho tất cả các ví dụ

4. Sử dụng MongoDB Shell

Chúng tôi sẽ sử dụng db. thu thập. phương thức find(query, projector) để truy vấn tài liệu từ MongoDB

Đầu tiên, hãy viết một truy vấn sẽ trả về tất cả các tài liệu bộ sưu tập xe

db.vehicle.find({});

Truy vấn trên trả về tất cả các tài liệu

{ "_id" : ObjectId("62d01d17cdd1b7c8a5f945b9"), "companyName" : "Skoda",
    "modelName" : "Octavia", "launchYear" : 2016, "type" : "Sports", "registeredNo" : "SKO 1134" }
{ "_id" : ObjectId("62d01d17cdd1b7c8a5f945ba"), "companyName" : "BMW",
    "modelName" : "X5", "launchYear" : 2020, "type" : "SUV", "registeredNo" : "BMW 3325" }
{ "_id" : ObjectId("62d01d17cdd1b7c8a5f945bb"), "companyName" : "Mercedes",
    "modelName" : "Maybach", "launchYear" : 2021, "type" : "Luxury", "registeredNo" : "MER 9754" }

Hơn nữa, hãy viết một truy vấn để tìm nạp tài liệu bộ sưu tập phương tiện bằng cách sử dụng ID được trả về trong các kết quả ở trên

db.vehicle.find(
{
    "_id": ObjectId("62d01d17cdd1b7c8a5f945b9")
});

Truy vấn trên trả về tài liệu bộ sưu tập xe có _id bằng ObjectId(“62d01d17cdd1b7c8a5f945b9”)

{ "_id" : ObjectId("62d01d17cdd1b7c8a5f945b9"), "companyName" : "Skoda",
    "modelName" : "Octavia", "launchYear" : 2016, "type" : "Sports", "registeredNo" : "SKO 1134" }

Hơn nữa, chúng tôi có thể truy xuất nhiều tài liệu bộ sưu tập phương tiện bằng cách sử dụng ID với toán tử trong truy vấn

db.vehicle.find(
{
    "_id": {
        $in: [
            ObjectId("62d01d17cdd1b7c8a5f945b9"),
            ObjectId("62d01d17cdd1b7c8a5f945ba"),
            ObjectId("62d01d17cdd1b7c8a5f945bb")
        ]
    }
});

Truy vấn trên trả về tất cả tài liệu bộ sưu tập phương tiện cho các ID được truy vấn trong toán tử in

{ "_id" : ObjectId("62d01d17cdd1b7c8a5f945b9"), "companyName" : "Skoda",
    "modelName" : "Octavia", "launchYear" : 2016, "type" : "Sports", "registeredNo" : "SKO 1134" }
{ "_id" : ObjectId("62d01d17cdd1b7c8a5f945ba"), "companyName" : "BMW",
    "modelName" : "X5", "launchYear" : 2020, "type" : "SUV", "registeredNo" : "BMW 3325" }
{ "_id" : ObjectId("62d01d17cdd1b7c8a5f945bb"), "companyName" : "Mercedes",
    "modelName" : "Maybach", "launchYear" : 2021, "type" : "Luxury", "registeredNo" : "MER 9754" }

Tương tự như vậy, bất kỳ toán tử truy vấn nào cũng có thể được sử dụng làm bộ lọc cho phương thức find() có ID được truy vấn

Ngoài ra, điều quan trọng cần lưu ý là trong khi truy vấn tài liệu bằng trường _id, giá trị chuỗi ID tài liệu phải được chỉ định dưới dạng ObjectId() chứ không phải Chuỗi

Hãy thử truy vấn một tài liệu hiện có với ID là giá trị Chuỗi

db.vehicle.find(
{
    "_id": "62d01d17cdd1b7c8a5f945b9"
});

Thật không may, truy vấn trên sẽ không trả về bất kỳ tài liệu nào vì không tồn tại bất kỳ tài liệu nào có ID là giá trị Chuỗi 62d01d17cdd1b7c8a5f945b9

5. Sử dụng trình điều khiển Java

Cho đến giờ, chúng ta đã học cách truy vấn tài liệu bằng ID với MongoDB Shell. Bây giờ chúng ta hãy thực hiện tương tự bằng cách sử dụng trình điều khiển Java MongoDB

Trước khi thực hiện thao tác cập nhật, trước tiên hãy kết nối với bộ sưu tập phương tiện trong cơ sở dữ liệu baeldung

db.vehicle.insertMany([
{
    "companyName":"Skoda", 
    "modelName":"Octavia",
    "launchYear":2016,
    "type":"Sports",
    "registeredNo":"SKO 1134"
},
{ 
    "companyName":"BMW",
    "modelName":"X5",
    "launchYear":2020,
    "type":"SUV",
    "registeredNo":"BMW 3325"
},
{
    "companyName":"Mercedes",
    "modelName":"Maybach",
    "launchYear":2021,
    "type":"Luxury",
    "registeredNo":"MER 9754"
}]);
0

Ở đây, trong trường hợp này, chúng tôi đang kết nối với MongoDB, đang chạy ở cổng mặc định 27017 trên localhost

Đầu tiên, hãy viết mã để truy vấn tài liệu bằng ID

db.vehicle.insertMany([
{
    "companyName":"Skoda", 
    "modelName":"Octavia",
    "launchYear":2016,
    "type":"Sports",
    "registeredNo":"SKO 1134"
},
{ 
    "companyName":"BMW",
    "modelName":"X5",
    "launchYear":2020,
    "type":"SUV",
    "registeredNo":"BMW 3325"
},
{
    "companyName":"Mercedes",
    "modelName":"Maybach",
    "launchYear":2021,
    "type":"Luxury",
    "registeredNo":"MER 9754"
}]);
1

Ở đây, chúng tôi chuyển bộ lọc Bson làm tham số cho phương thức find() với trường _id để truy vấn. Đoạn mã trên sẽ trả về tài liệu bộ sưu tập phương tiện trong đó _id bằng ObjectId(“62d01d17cdd1b7c8a5f945b9”)

Hơn nữa, hãy viết một đoạn trích để truy vấn các tài liệu có nhiều ID

db.vehicle.insertMany([
{
    "companyName":"Skoda", 
    "modelName":"Octavia",
    "launchYear":2016,
    "type":"Sports",
    "registeredNo":"SKO 1134"
},
{ 
    "companyName":"BMW",
    "modelName":"X5",
    "launchYear":2020,
    "type":"SUV",
    "registeredNo":"BMW 3325"
},
{
    "companyName":"Mercedes",
    "modelName":"Maybach",
    "launchYear":2021,
    "type":"Luxury",
    "registeredNo":"MER 9754"
}]);
2

Truy vấn trên trả về tất cả tài liệu bộ sưu tập xe cho các ID được truy vấn

Cuối cùng, hãy thử truy vấn bộ sưu tập phương tiện bằng ID do trình điều khiển tạo

db.vehicle.insertMany([
{
    "companyName":"Skoda", 
    "modelName":"Octavia",
    "launchYear":2016,
    "type":"Sports",
    "registeredNo":"SKO 1134"
},
{ 
    "companyName":"BMW",
    "modelName":"X5",
    "launchYear":2020,
    "type":"SUV",
    "registeredNo":"BMW 3325"
},
{
    "companyName":"Mercedes",
    "modelName":"Maybach",
    "launchYear":2021,
    "type":"Luxury",
    "registeredNo":"MER 9754"
}]);
3

Truy vấn trên sẽ không trả về bất kỳ tài liệu nào vì tài liệu có ID mới được tạo sẽ không tồn tại trong bộ sưu tập phương tiện

6. Phần kết luận

Trong bài viết này, chúng ta đã học cách truy vấn tài liệu bằng ID tài liệu trong MongoDB. Lúc đầu, chúng tôi đã xem xét các trường hợp sử dụng này trong truy vấn MongoDB Shell, sau đó chúng tôi thảo luận về mã trình điều khiển Java tương ứng