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

Lấy phần tử lớn nhất trong collection MongoDB

Để lấy tài liệu có giá trị lớn nhất (maximum) của một trường, sắp xếp giảm dần (-1) và giới hạn 1 kết quả (limit(1)). Tạo collection:

> db.demo669.insertOne({"Marks":76});
{ "acknowledged" : true, "insertedId" : ObjectId("5ea3133c04263e90dac943d9") }
> db.demo669.insertOne({"Marks":55});
{ "acknowledged" : true, "insertedId" : ObjectId("5ea3133f04263e90dac943da") }
> db.demo669.insertOne({"Marks":89});
{ "acknowledged" : true, "insertedId" : ObjectId("5ea3134204263e90dac943db") }
> db.demo669.insertOne({"Marks":88});
{ "acknowledged" : true, "insertedId" : ObjectId("5ea3134504263e90dac943dc") }
> db.demo669.insertOne({"Marks":79});
{ "acknowledged" : true, "insertedId" : ObjectId("5ea3134e04263e90dac943dd") }

Hiển thị dữ liệu:

> db.demo669.find();

Kết quả (5 tài liệu, Marks: 76, 55, 89, 88, 79):

Truy vấn lấy tài liệu có Marks lớn nhất:

> db.demo669.find().sort({"Marks":-1}).limit(1);

Kết quả - Marks=89 (lớn nhất):

Cách thay thế với Aggregation:

db.demo669.aggregate([
  { $sort: { Marks: -1 } },
  { $limit: 1 }
])

Hoặc dùng $max trong $group (chỉ lấy giá trị max, không lấy toàn bộ document):

db.demo669.aggregate([{ $group: { _id: null, maxMarks: { $max: "$Marks" } } }])

Lưu ý: sort() + limit() cần index trên trường sắp xếp để tránh in-memory sort (giới hạn 32MB RAM). Tạo index: db.demo669.createIndex({Marks: -1}).