Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Lấy một phần tử đơn lẻ từ mảng kết quả theo chỉ số trong MongoDB

Để lấy một phần tử cụ thể từ mảng kết quả theo chỉ số (index), bạn có thể sử dụng Pipeline Aggregation với các stage $match, $skip và $limit. Phương pháp này hữu ích khi cần phân trang hoặc truy xuất bản ghi tại vị trí xác định.

1. Tạo bộ sưu tập và chèn dữ liệu mẫu

> db.demo391.insertOne({ "_id": 101, "Name": "Chris", "Values": ["101", "102"] })
{ "acknowledged": true, "insertedId": 101 }
> db.demo391.insertOne({ "_id": 111, "Name": "Chris", "Values": ["101", "102"] })
{ "acknowledged": true, "insertedId": 111 }
> db.demo391.insertOne({ "_id": 121, "Name": "Chris", "Values": ["101", "102"] })
{ "acknowledged": true, "insertedId": 121 }

2. Xem dữ liệu ban đầu

> db.demo391.find();

Kết quả:

{ "_id": 101, "Name": "Chris", "Values": ["101", "102"] }
{ "_id": 111, "Name": "Chris", "Values": ["101", "102"] }
{ "_id": 121, "Name": "Chris", "Values": ["101", "102"] }

3. Truy vấn lấy phần tử tại chỉ số 2 (phần tử thứ 3)

Sử dụng biến i để chỉ định vị trí, kết hợp $skip để bỏ qua i-1 bản ghi đầu và $limit: 1 để lấy 1 bản ghi:

> var i = 2;
> db.demo391.aggregate([
    { $match: { "Name": "Chris" } },
    { $skip: i - 1 },
    { $limit: 1 }
]);

4. Kết quả

{ "_id": 111, "Name": "Chris", "Values": ["101", "102"] }

Giải thích: Với i = 2, $skip: 1 sẽ bỏ qua bản ghi đầu tiên (_id: 101) và trả về bản ghi thứ hai (_id: 111). Cách này thường dùng cho phân trang (pagination) kết quả truy vấn.