Kết thúc bài học bạn phải làm được chương trình như hình dưới đây:
			
Để sắp xếp dữ liệu trong quá trình truy vấn ta dùng đối tượng: Builders
Trong đối tượng này có rất nhiều phương thức, ta quan tâm 2 phương thức chính đã là Sắp tăng dần (Ascending) và Sắp giảm dần (Descending).
Ví dụ: Muốn viết lệnh sắp xếp Product theo Cột Đơn Giá tăng dần:
var sort = Builders<BsonDocument>.Sort.Ascending(“DonGia”);
			Ví dụ: Muốn viết lệnh sắp xếp Product theo Cột Đơn Giá Giảm dần:
			var sort = Builders<BsonDocument>.Sort.Descending(“DonGia”);
Tương tự như vậy, nếu bạn muốn sắp xếp cột nào thì thay DonGia bằng Cột bạn muốn sắp xếp.
Sau đó ta truyền đối tượng sort vào lệnh truy vấn dữ liệu(các lệnh truy vấn bạn đã được học rất kỹ ở những bài 5, 6, 7, 8 rồi):
			List
Ví dụ: Sắp xếp kết hợp nhiều cột:
			var sort = Builders
Lệnh trên có nghĩa: Sắp xếp theo đơn giá tăng dần, nếu đơn giá trùng nhau thì sắp xếp theo Mã giảm dần.
OK, let’s go. Bây giờ ta tạo một Project tên : SortMongoDBCSharp, cách tham chiếu thư viện MongoDB driver bạn tự xem lại bài 4. Trong bài này Tui đi thẳng vào thiết kế giao diện và xử lý các hàm truy vấn dữ liệu và sắp xếp ở trên.
Thiết kế giao diện MainWindow.xaml:
| 
								 
									1 
							 | 
							
								 | 
						
Xử lý coding cho MainWindow.xaml.cs:
0. Lớp Product để ta convert qua Model cho lẹ:
| 
								 
									1 
								
									2 
								
									3 
								
									4 
								
									5 
								
									6 
								
									7 
								
									8 
								
									9 
								
									10 
								
									11 
								
									12 
								
									13 
								
									14 
								
									15 
								
									16 
							 | 
							
								using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace SortMongoDBCSharp{public class Product{public object _id { get; set; }public string Ma { get; set; }public string Ten { get; set; }public double DonGia { get; set; }}} | 
						
Chú ý lớp này Tui cũng đã giải thích ở bài 8
1.Tải toàn bộ dữ liệu trong bảng Product (Try 1)
| 
								 
									1 
								
									2 
								
									3 
								
									4 
								
									5 
								
									6 
								
									7 
								
									8 
								
									9 
								
									10 
								
									11 
								
									12 
								
									13 
								
									14 
								
									15 
								
									16 
								
									17 
								
									18 
							 | 
							
								private void btnTry1_Click(object sender, RoutedEventArgs e){LoadAll();}private void LoadAll(){MongoClient client = new MongoClient("mongodb://localhost:27017");IMongoDatabase database = client.GetDatabase("QuanLySanPham");IMongoCollection collection = database.GetCollection("Product");List documents = collection.Find(new BsonDocument()).ToList();List dsProduct = new List();foreach (BsonDocument document in documents){Product p = BsonSerializer.Deserialize(document);dsProduct.Add(p);}lvProduct.ItemsSource = dsProduct;} | 
						
Đoạn lệnh trên ta đã rất quen thuộc, đó là tải toàn bộ sản phẩm lên giao diện.
Kết quả:
2.Tải toàn bộ dữ liệu trong bảng Product và sắp xếp theo đơn giá tăng dần (Try 2)
| 
								 
									1 
								
									2 
								
									3 
								
									4 
								
									5 
								
									6 
								
									7 
								
									8 
								
									9 
								
									10 
								
									11 
								
									12 
								
									13 
								
									14 
								
									15 
								
									16 
								
									17 
								
									18 
								
									19 
								
									20 
							 | 
							
								private void btnTry2_Click(object sender, RoutedEventArgs e){LoadAll_Sort_Ascending();}private void LoadAll_Sort_Ascending(){MongoClient client = new MongoClient("mongodb://localhost:27017");IMongoDatabase database = client.GetDatabase("QuanLySanPham");IMongoCollection collection = database.GetCollection("Product");var sort = Builders.Sort.Ascending("DonGia");List documents = collection.Find(new BsonDocument()).Sort(sort).ToList();List dsProduct = new List();foreach (BsonDocument document in documents){Product p = BsonSerializer.Deserialize(document);dsProduct.Add(p);}lvProduct.ItemsSource = dsProduct;} | 
						
Đoạn coding ở trên ta thấy:
			var sort = Builders
dùng để tạo đối tượng Sort tăng dần theo cột đơn giá.
Còn lệnh dưới đây là gán đối tượng Sort đó vào hàm lấy danh sách. Như vậy sau khi truy vấn nó sẽ sắp xếp dữ liệu theo cột đơn giá:
			List
Kết quả:
3.Tải toàn bộ dữ liệu trong bảng Product và sắp xếp theo đơn giá giảm dần (Try 3)
| 
								 
									1 
								
									2 
								
									3 
								
									4 
								
									5 
								
									6 
								
									7 
								
									8 
								
									9 
								
									10 
								
									11 
								
									12 
								
									13 
								
									14 
								
									15 
								
									16 
								
									17 
								
									18 
								
									19 
								
									20 
							 | 
							
								private void btnTry3_Click(object sender, RoutedEventArgs e){LoadAll_Sort_Descending();}private void LoadAll_Sort_Descending(){MongoClient client = new MongoClient("mongodb://localhost:27017");IMongoDatabase database = client.GetDatabase("QuanLySanPham");IMongoCollection collection = database.GetCollection("Product");var sort = Builders.Sort.Descending("DonGia");List documents = collection.Find(new BsonDocument()).Sort(sort).ToList();List dsProduct = new List();foreach (BsonDocument document in documents){Product p = BsonSerializer.Deserialize(document);dsProduct.Add(p);}lvProduct.ItemsSource = dsProduct;} | 
						
Đoạn coding ở trên ta thấy:
			var sort = Builders
dùng để tạo đối tượng Sort giảm dần theo cột đơn giá.
Còn lệnh dưới đây là gán đối tượng Sort đó vào hàm lấy danh sách. Như vậy sau khi truy vấn nó sẽ sắp xếp dữ liệu theo cột đơn giá:
			List
Kết quả:
4.Lọc Product theo đơn giá [a…b] (Try 4)
| 
								 
									1 
								
									2 
								
									3 
								
									4 
								
									5 
								
									6 
								
									7 
								
									8 
								
									9 
								
									10 
								
									11 
								
									12 
								
									13 
								
									14 
								
									15 
								
									16 
								
									17 
								
									18 
								
									19 
							 | 
							
								private void btnTry4_Click(object sender, RoutedEventArgs e){LoadFilterProduct(150, 250);}private void LoadFilterProduct(double min,double max){MongoClient client = new MongoClient("mongodb://localhost:27017");IMongoDatabase database = client.GetDatabase("QuanLySanPham");IMongoCollection collection = database.GetCollection("Product");var filter = Builders.Filter.Gte("DonGia", min) & Builders.Filter.Lte("DonGia", max);List documents = collection.Find(filter).ToList();List dsProduct = new List();foreach (BsonDocument document in documents){Product p = BsonSerializer.Deserialize(document);dsProduct.Add(p);}lvProduct.ItemsSource = dsProduct;} | 
						
Ở trên Tui viết riêng một hàm LoadFilterProduct(double min,double max) lọc Product theo đơn giá Min và max. các Em chỉ cần gọi hàm và truyền giá trị vào mà thôi nên rất tiện lợi. Cách lọc này Ta cũng đã được học kỹ trong bài 7.
Kết quả:
5.Lọc Product theo đơn giá [a…b] và sắp xếp đơn giá giảm dần (Try 5)
| 
								 
									1 
								
									2 
								
									3 
								
									4 
								
									5 
								
									6 
								
									7 
								
									8 
								
									9 
								
									10 
								
									11 
								
									12 
								
									13 
								
									14 
								
									15 
								
									16 
								
									17 
								
									18 
								
									19 
								
									20 
							 | 
							
								private void btnTry5_Click(object sender, RoutedEventArgs e){LoadFilter_Sort_Descending(150, 250);}private void LoadFilter_Sort_Descending(double min, double max){MongoClient client = new MongoClient("mongodb://localhost:27017");IMongoDatabase database = client.GetDatabase("QuanLySanPham");IMongoCollection collection = database.GetCollection("Product");var filter = Builders.Filter.Gte("DonGia", min) & Builders.Filter.Lte("DonGia", max);var sort = Builders.Sort.Descending("DonGia");List documents = collection.Find(filter).Sort(sort).ToList();List dsProduct = new List();foreach (BsonDocument document in documents){Product p = BsonSerializer.Deserialize(document);dsProduct.Add(p);}lvProduct.ItemsSource = dsProduct;} | 
						
Tương tự như try 4, ở đây Tui tạo hàm độc lập LoadFilter_Sort_Descending(double min, double max) và kết hợp thêm Sort giảm dần. Như vậy vừa filter vừa sort giảm dần (bạn có thể áp dụng cho tăng dần).
Kết quả:
6.Tải toàn bộ dữ liệu trong bảng Product và sắp xếp theo đơn giá tăng dần, nếu đơn giá trùng nhau thì sắp xếp theo Mã giảm dần (Try 6)
Đây là một trong nhưng yêu cầu được sử dụng rất nhiều trong phần mềm. Ta làm như sau:
| 
								 
									1 
								
									2 
								
									3 
								
									4 
								
									5 
								
									6 
								
									7 
								
									8 
								
									9 
								
									10 
								
									11 
								
									12 
								
									13 
								
									14 
								
									15 
								
									16 
								
									17 
								
									18 
								
									19 
								
									20 
								
									21 
								
									22 
								
									23 
							 | 
							
								private void btnTry6_Click(object sender, RoutedEventArgs e){LoadAll_Sort_Ascending_Descending();}private void LoadAll_Sort_Ascending_Descending(){MongoClient client = new MongoClient("mongodb://localhost:27017");IMongoDatabase database = client.GetDatabase("QuanLySanPham");IMongoCollection collection = database.GetCollection("Product");var sort = Builders.Sort.Ascending("DonGia").Descending("Ma");List documents = collection.Find(new BsonDocument()).Sort(sort).ToList();List dsProduct = new List();foreach (BsonDocument document in documents){Product p = BsonSerializer.Deserialize(document);dsProduct.Add(p);}lvProduct.ItemsSource = dsProduct;} | 
						
Bạn quan sát:
			var sort = Builders
Là sự kết hợp của nhiều yêu cầu Sort. Cụ thể: Sắp xếp Đơn giá tăng dần, nếu đơn giá trùng nhau thì sắp xếp theo Mã giảm dần. Bạn có thể áp dụng để làm các yêu cầu tương tự.
Kết quả:
			
Bạn quan sát, Sản phẩm Sting và Lavie có đơn giá trùng nhau. Nó sẽ sắp xếp giảm dần về Mã, Tức là Sting có mã P6 sẽ được liệt kê trước sản phẩm Lavie có mã là P4.
7.Thoát
Rất đơn giá, chỉ cần gọi lệnh Close();
| 
								 
									1 
								
									2 
								
									3 
								
									4 
							 | 
							
								private void btnExit_Click(object sender, RoutedEventArgs e){Close();} | 
						
Dưới đây là tổng hợp XAML và Coding đầy đủ:
MainWindow.xaml:
| 
								 
									1 
							 | 
							
								 | 
						
Coding đầy đủ: MainWindow.xaml.cs:
| 
								 
									1 
								
									2 
								
									3 
								
									4 
								
									5 
								
									6 
								
									7 
								
									8 
								
									9 
								
									10 
								
									11 
								
									12 
								
									13 
								
									14 
								
									15 
								
									16 
								
									17 
								
									18 
								
									19 
								
									20 
								
									21 
								
									22 
								
									23 
								
									24 
								
									25 
								
									26 
								
									27 
								
									28 
								
									29 
								
									30 
								
									31 
								
									32 
								
									33 
								
									34 
								
									35 
								
									36 
								
									37 
								
									38 
								
									39 
								
									40 
								
									41 
								
									42 
								
									43 
								
									44 
								
									45 
								
									46 
								
									47 
								
									48 
								
									49 
								
									50 
								
									51 
								
									52 
								
									53 
								
									54 
								
									55 
								
									56 
								
									57 
								
									58 
								
									59 
								
									60 
								
									61 
								
									62 
								
									63 
								
									64 
								
									65 
								
									66 
								
									67 
								
									68 
								
									69 
								
									70 
								
									71 
								
									72 
								
									73 
								
									74 
								
									75 
								
									76 
								
									77 
								
									78 
								
									79 
								
									80 
								
									81 
								
									82 
								
									83 
								
									84 
								
									85 
								
									86 
								
									87 
								
									88 
								
									89 
								
									90 
								
									91 
								
									92 
								
									93 
								
									94 
								
									95 
								
									96 
								
									97 
								
									98 
								
									99 
								
									100 
								
									101 
								
									102 
								
									103 
								
									104 
								
									105 
								
									106 
								
									107 
								
									108 
								
									109 
								
									110 
								
									111 
								
									112 
								
									113 
								
									114 
								
									115 
								
									116 
								
									117 
								
									118 
								
									119 
								
									120 
								
									121 
								
									122 
								
									123 
								
									124 
								
									125 
								
									126 
								
									127 
								
									128 
								
									129 
								
									130 
								
									131 
								
									132 
								
									133 
								
									134 
								
									135 
								
									136 
								
									137 
								
									138 
								
									139 
								
									140 
								
									141 
								
									142 
								
									143 
								
									144 
								
									145 
								
									146 
								
									147 
								
									148 
								
									149 
								
									150 
								
									151 
								
									152 
								
									153 
								
									154 
								
									155 
								
									156 
								
									157 
								
									158 
								
									159 
								
									160 
								
									161 
								
									162 
								
									163 
								
									164 
								
									165 
								
									166 
								
									167 
								
									168 
								
									169 
								
									170 
							 | 
							
								using MongoDB.Bson;using MongoDB.Bson.Serialization;using MongoDB.Driver;using MongoDB.Driver.Builders;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Text.RegularExpressions;using System.Threading.Tasks;using System.Windows;using System.Windows.Controls;using System.Windows.Data;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Imaging;using System.Windows.Navigation;using System.Windows.Shapes;namespace SortMongoDBCSharp{////// Interaction logic for MainWindow.xaml/// public partial class MainWindow : Window{public MainWindow(){InitializeComponent();}private void Window_Loaded(object sender, RoutedEventArgs e){}private void btnExit_Click(object sender, RoutedEventArgs e){Close();}private void btnTry1_Click(object sender, RoutedEventArgs e){LoadAll();}private void LoadAll(){MongoClient client = new MongoClient("mongodb://localhost:27017");IMongoDatabase database = client.GetDatabase("QuanLySanPham");IMongoCollection collection = database.GetCollection("Product");List documents = collection.Find(new BsonDocument()).ToList();List dsProduct = new List();foreach (BsonDocument document in documents){Product p = BsonSerializer.Deserialize(document);dsProduct.Add(p);}lvProduct.ItemsSource = dsProduct;}private void btnTry2_Click(object sender, RoutedEventArgs e){LoadAll_Sort_Ascending();}private void LoadAll_Sort_Ascending(){MongoClient client = new MongoClient("mongodb://localhost:27017");IMongoDatabase database = client.GetDatabase("QuanLySanPham");IMongoCollection collection = database.GetCollection("Product");var sort = Builders.Sort.Ascending("DonGia");List documents = collection.Find(new BsonDocument()).Sort(sort).ToList();List dsProduct = new List();foreach (BsonDocument document in documents){Product p = BsonSerializer.Deserialize(document);dsProduct.Add(p);}lvProduct.ItemsSource = dsProduct;}private void btnTry3_Click(object sender, RoutedEventArgs e){LoadAll_Sort_Descending();}private void LoadAll_Sort_Descending(){MongoClient client = new MongoClient("mongodb://localhost:27017");IMongoDatabase database = client.GetDatabase("QuanLySanPham");IMongoCollection collection = database.GetCollection("Product");var sort = Builders.Sort.Descending("DonGia");List documents = collection.Find(new BsonDocument()).Sort(sort).ToList();List dsProduct = new List();foreach (BsonDocument document in documents){Product p = BsonSerializer.Deserialize(document);dsProduct.Add(p);}lvProduct.ItemsSource = dsProduct;}private void btnTry4_Click(object sender, RoutedEventArgs e){LoadFilterProduct(150, 250);}private void LoadFilterProduct(double min,double max){MongoClient client = new MongoClient("mongodb://localhost:27017");IMongoDatabase database = client.GetDatabase("QuanLySanPham");IMongoCollection collection = database.GetCollection("Product");var filter = Builders.Filter.Gte("DonGia", min) & Builders.Filter.Lte("DonGia", max);List documents = collection.Find(filter).ToList();List dsProduct = new List();foreach (BsonDocument document in documents){Product p = BsonSerializer.Deserialize(document);dsProduct.Add(p);}lvProduct.ItemsSource = dsProduct;}private void btnTry5_Click(object sender, RoutedEventArgs e){LoadFilter_Sort_Descending(150, 250);}private void LoadFilter_Sort_Descending(double min, double max){MongoClient client = new MongoClient("mongodb://localhost:27017");IMongoDatabase database = client.GetDatabase("QuanLySanPham");IMongoCollection collection = database.GetCollection("Product");var filter = Builders.Filter.Gte("DonGia", min) & Builders.Filter.Lte("DonGia", max);var sort = Builders.Sort.Descending("DonGia");List documents = collection.Find(filter).Sort(sort).ToList();List dsProduct = new List();foreach (BsonDocument document in documents){Product p = BsonSerializer.Deserialize(document);dsProduct.Add(p);}lvProduct.ItemsSource = dsProduct;}private void btnTry6_Click(object sender, RoutedEventArgs e){LoadAll_Sort_Ascending_Descending();}private void LoadAll_Sort_Ascending_Descending(){MongoClient client = new MongoClient("mongodb://localhost:27017");IMongoDatabase database = client.GetDatabase("QuanLySanPham");IMongoCollection collection = database.GetCollection("Product");var sort = Builders.Sort.Ascending("DonGia").Descending("Ma");List documents = collection.Find(new BsonDocument()).Sort(sort).ToList();List dsProduct = new List();foreach (BsonDocument document in documents){Product p = BsonSerializer.Deserialize(document);dsProduct.Add(p);}lvProduct.ItemsSource = dsProduct;}}} | 
						
Chạy chương trình lên ta có được kết quả như mong muốn.
» Tin mới nhất:
» Các tin khác: