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

Sắp xếp danh sách và thêm vị trí (position) cho các mục trong MongoDB

Sử dụng sort() kết hợp vòng lặp JavaScript trong shell để thêm trường Position dựa trên thứ tự sắp xếp. Tạo collection điểm số:

> db.demo581.insertOne({"Name":"Chris","Score":56});
{ "acknowledged" : true, "insertedId" : ObjectId("5e91cbbbfd2d90c177b5bcb6") }
> db.demo581.insertOne({"Name":"Bob","Score":240});
{ "acknowledged" : true, "insertedId" : ObjectId("5e91cbbbfd2d90c177b5bcb7") }
> db.demo581.insertOne({"Name":"David","Score":150});
{ "acknowledged" : true, "insertedId" : ObjectId("5e91cbbcfd2d90c177b5bcb8") }

Hiển thị dữ liệu gốc:

> db.demo581.find();
{ "_id" : ObjectId("5e91cbbbfd2d90c177b5bcb6"), "Name" : "Chris", "Score" : 56 }
{ "_id" : ObjectId("5e91cbbbfd2d90c177b5bcb7"), "Name" : "Bob", "Score" : 240 }
{ "_id" : ObjectId("5e91cbbcfd2d90c177b5bcb8"), "Name" : "David", "Score" : 150 }

Tạo chỉ mục, sắp xếp theo Score tăng dần, và gán Position:

> db.demo581.createIndex({Score:1})
{ "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
> var i = 1;
> db.demo581.find().sort({"Score": 1}).forEach(function (d){
...   d.Position = i;
...   i++;
...   db.demo581.save(d);
... })

Kết quả (đã có Position):

{ "_id" : ObjectId("5e91cbbbfd2d90c177b5bcb6"), "Name" : "Chris", "Score" : 56, "Position" : 1 }
{ "_id" : ObjectId("5e91cbbbfd2d90c177b5bcb7"), "Name" : "Bob", "Score" : 240, "Position" : 3 }
{ "_id" : ObjectId("5e91cbbcfd2d90c177b5bcb8"), "Name" : "David", "Score" : 150, "Position" : 2 }

Lưu ý: Cách này dùng shell JavaScript (forEach + save). Trong ứng dụng production, nên dùng bulkWrite hoặc aggregation với $setWindowFields (MongoDB 5.0+) để hiệu quả hơn.