Điều này có thể được thực hiện trong một vài bước. Bước đầu tiên là lấy danh sách các tài liệu có điểm tối thiểu bằng cách sử dụng khung tổng hợp với <code>$match
, $ unwind
và $ group
toán tử sắp xếp hợp lý tài liệu của bạn để tìm điểm tối thiểu cho mỗi tài liệu:
lowest_scores_docs = db.school.aggregate([
{ "$match": {"scores.type": "homework"} },
{ "$unwind": "$scores" }, { "$match": {"scores.type": "homework"} },
{ "$group": { "_id":"$_id", "lowest_score": {"$min": "$scores.score" } } } ] )
Bước thứ hai là lặp lại từ điển ở trên và sử dụng $ pull
toán tử trong truy vấn cập nhật để xóa phần tử khỏi mảng như sau:
for result in lowest_scores_docs["result"]:
db.school.update({ "_id": result["_id"] },
{ "$pull": { "scores": { "score": result["lowest_score"] } } } )