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

Lấy mảng giá trị (thay vì mảng JSON) với điều kiện lớn hơn 50 trong MongoDB

Để lấy danh sách giá trị (chỉ các giá trị thuần túy, không phải object JSON đầy đủ) từ các tài liệu thỏa mãn điều kiện (ví dụ: Value > 50), bạn có thể kết hợp distinct() để lấy mảng _id rồi dùng $in để truy xuất, hoặc dùng Aggregation Pipeline với $match và $project.

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

> db.demo50.save({ "Value": 40 });
> db.demo50.save({ "Value": 100 });
> db.demo50.save({ "Value": 20 });
> db.demo50.save({ "Value": 510 });

2. Xem dữ liệu

> db.demo50.find();

Kết quả:

{ "_id": ObjectId("..."), "Value": 40 }
{ "_id": ObjectId("..."), "Value": 100 }
{ "_id": ObjectId("..."), "Value": 20 }
{ "_id": ObjectId("..."), "Value": 510 }

3. Cách 1: Dùng distinct() + $in (như ví dụ gốc)

> var listOfValues = db.demo50.distinct("_id", { Value: { $gt: 50 } });
[ ObjectId("..."), ObjectId("...") ]
> db.demo50.find({ _id: { $in: listOfValues } });

Kết quả trả về toàn bộ tài liệu (object JSON).

4. Cách 2: Chỉ lấy mảng giá trị Value (Aggregation - khuyến nghị)

> db.demo50.aggregate([
    { $match: { Value: { $gt: 50 } } },
    { $group: { _id: null, values: { $push: "$Value" } } },
    { $project: { _id: 0, values: 1 } }
]);

Kết quả:

{ "values": [ 100, 510 ] }

So sánh:

  • Cách 1: Trả về mảng tài liệu đầy đủ (có _id, Value).
  • Cách 2: Trả về mảng chỉ chứa giá trị Value thuần túy - phù hợp hơn cho biểu đồ, báo cáo.