Hướng dẫn filter mongodb - bộ lọc mongodb
Ở bài 6 chúng ta được biết cách dùng C# để truy vấn dữ liệu rồi, trong thực tế chúng ta phải đối mặt với các bài toán như: Tìm kiếm (filter), sắp xếp (sort)… Có thể nói mọi người chúng ta đều thực hiện 2 thao tác Tìm Kiếm và Sắp xếp trong suốt các hoạt động thường nhật, Ai sắp xếp tốt thì tìm kiếm nhanh, đáp ứng công việc hiệu quả hơn. Do đó trong mọi phần mềm ta đều phải cung cấp các chức năng Tìm kiếm và sắp xếp. Trước tiên ta nhập thêm một số dữ liệu để hỗ trợ cho bài học Filter được phong phú hơn như dưới đây (bấm chọn Table để xem dạng Table cho dễ nha): Ngoài ra bạn có thể tải dữ liệu JSON của bảng Product ở đây (xuất xuất dữ liệu bạn vào menu View/ Export. Muốn nhập dữ liệu bạn vào menu View/Import): Product.jsonDriver .Net cung cấp hàng loạt các cách thức Filter để đáp ứng hầu hết mọi nhu cầu của người dùng. Đối tượng Builders.Filter trong thư viện này cung cấp các hàm phổ biến như sau (còn nhiều hàm khác các bạn tự khám phá nha):Builders varbuilder= Builders.Filter; builder= Builders<BsonDocument>.Filter;
Chi tiết cách sử dụng: -1.Hàm Eq:builder.Eq(attribute,value)Hàm Eq:builder.Eq(attribute,value) Ví dụ 1: Hãy viết lệnh lấy tất cả các Product mà DonGia = 150 private void btnEQ_Gia_Click(object sender, RoutedEventArgs e) { MongoClient client = new MongoClient("mongodb://localhost:27017"); IMongoDatabase database = client.GetDatabase("QuanLySanPham"); IMongoCollection collection = database.GetCollection("Product"); var builder = Builders.Filter; var query = builder.Eq("DonGia", 150); List documents = collection.Find(query).ToList(); //là tên của 1 Listbox nào đó lstProduct.Items.Clear(); foreach (BsonDocument document in documents) { string ma = document["Ma"].AsString; string ten = document["Ten"].AsString; double gia = document["DonGia"].AsDouble; lstProduct.Items.Add(ma + "\t" + ten + "\t" + gia); } } Kết quả: Hãy viết lệnh hiển thị thông tin chi tiết của 1 Product có mã =P1 private void btnEqMa_Click(object sender, RoutedEventArgs e) { MongoClient client = new MongoClient("mongodb://localhost:27017"); IMongoDatabase database = client.GetDatabase("QuanLySanPham"); IMongoCollection collection = database.GetCollection("Product"); var builder = Builders.Filter; var query = builder.Eq("Ma", "P1"); BsonDocument document = collection.Find(query).FirstOrDefault(); if(document!=null) { string ma = document["Ma"].AsString; string ten = document["Ten"].AsString; double gia = document["DonGia"].AsDouble; MessageBox.Show(ma + "-" + ten + "-" + gia); } else { MessageBox.Show("Ko thấy P1"); } } Kết quả: Ví dụ 2: builder.Gt(attribute,value)Hãy viết lệnh hiển thị thông tin chi tiết của 1 Product có mã =P1 -2 hàm Gt: builder.Gt(attribute,value) private void btnGtGia_Click(object sender, RoutedEventArgs e) { MongoClient client = new MongoClient("mongodb://localhost:27017"); IMongoDatabase database = client.GetDatabase("QuanLySanPham"); IMongoCollection collection = database.GetCollection("Product"); var builder = Builders.Filter; var query = builder.Gt("DonGia", 230); List documents = collection.Find(query).ToList(); //là tên của 1 Listbox nào đó lstProduct.Items.Clear(); foreach (BsonDocument document in documents) { string ma = document["Ma"].AsString; string ten = document["Ten"].AsString; double gia = document["DonGia"].AsDouble; lstProduct.Items.Add(ma + "\t" + ten + "\t" + gia); } } Ví dụ 3: Viết lệnh hiển thị tất cả các Product có Đơn giá lớn hơn 230 builder.Gte(attribute,value)Kết quả (để ý không có sản phẩm có giá 230 hiển thị ở đây): -3 hàm Ge: builder.Gte(attribute,value) private void btnGteGia_Click(object sender, RoutedEventArgs e) { MongoClient client = new MongoClient("mongodb://localhost:27017"); IMongoDatabase database = client.GetDatabase("QuanLySanPham"); IMongoCollection collection = database.GetCollection("Product"); var builder = Builders.Filter; var query = builder.Gte("DonGia", 230); List documents = collection.Find(query).ToList(); //là tên của 1 Listbox nào đó lstProduct.Items.Clear(); foreach (BsonDocument document in documents) { string ma = document["Ma"].AsString; string ten = document["Ten"].AsString; double gia = document["DonGia"].AsDouble; lstProduct.Items.Add(ma + "\t" + ten + "\t" + gia); } } Ví dụ 4: Kết quả (để y có sản phẩm có giá 230 hiển thị ở đây): -4 Hàm Lt: builder.Lt(attribute,value) private void btnLtGia_Click(object sender, RoutedEventArgs e) { MongoClient client = new MongoClient("mongodb://localhost:27017"); IMongoDatabase database = client.GetDatabase("QuanLySanPham"); IMongoCollection collection = database.GetCollection("Product"); var builder = Builders.Filter; var query = builder.Lt("DonGia", 230); List documents = collection.Find(query).ToList(); //là tên của 1 Listbox nào đó lstProduct.Items.Clear(); foreach (BsonDocument document in documents) { string ma = document["Ma"].AsString; string ten = document["Ten"].AsString; double gia = document["DonGia"].AsDouble; lstProduct.Items.Add(ma + "\t" + ten + "\t" + gia); } } Ví dụ 5: Viết lệnh hiển thị tất cả các Product có Đơn giá nhỏ hơn 230builder.Lte(attribute,value)Kết quả (Để ý không có Sản phẩm nào có giá 230 hiển thị ở đây): -5 Hàm Lte:builder.Lte(attribute,value) private void btnLteGia_Click(object sender, RoutedEventArgs e) { MongoClient client = new MongoClient("mongodb://localhost:27017"); IMongoDatabase database = client.GetDatabase("QuanLySanPham"); IMongoCollection collection = database.GetCollection("Product"); var builder = Builders.Filter; var query = builder.Lte("DonGia", 230); List documents = collection.Find(query).ToList(); //là tên của 1 Listbox nào đó lstProduct.Items.Clear(); foreach (BsonDocument document in documents) { string ma = document["Ma"].AsString; string ten = document["Ten"].AsString; double gia = document["DonGia"].AsDouble; lstProduct.Items.Add(ma + "\t" + ten + "\t" + gia); } } Ví dụ 6: Viết lệnh hiển thị tất cả các Product có Đơn giá nhỏ hơn hay bằng 230Kết quả (Để ý có sản phẩm có giá 230 hiển thị ở đây): -6- Kết hợp Lt/Lte với Gt/Gte private void btnLteGteGia_Click(object sender, RoutedEventArgs e) { MongoClient client = new MongoClient("mongodb://localhost:27017"); IMongoDatabase database = client.GetDatabase("QuanLySanPham"); IMongoCollection collection = database.GetCollection("Product"); var builder = Builders.Filter; //lệnh kết hợp các hàm Filter dữ liệu: var query = builder.Gte("DonGia", 155) & builder.Lte("DonGia", 250); List documents = collection.Find(query).ToList(); //là tên của 1 Listbox nào đó lstProduct.Items.Clear(); foreach (BsonDocument document in documents) { string ma = document["Ma"].AsString; string ten = document["Ten"].AsString; double gia = document["DonGia"].AsDouble; lstProduct.Items.Add(ma + "\t" + ten + "\t" + gia); } } Kết quả: Ví dụ 2: builder.where(LINQ Expression)Hãy viết lệnh hiển thị thông tin chi tiết của 1 Product có mã =P1 -2 hàm Gt: builder.Gt(attribute,value) private void btnWhere_Click(object sender, RoutedEventArgs e) { MongoClient client = new MongoClient("mongodb://localhost:27017"); IMongoDatabase database = client.GetDatabase("QuanLySanPham"); IMongoCollection collection = database.GetCollection("Product"); var builder = Builders.Filter; var query = builder.Where(x => x["DonGia"] >= 155 && x["DonGia"] <= 250); List documents = collection.Find(query).ToList(); //là tên của 1 Listbox nào đó lstProduct.Items.Clear(); foreach (BsonDocument document in documents) { string ma = document["Ma"].AsString; string ten = document["Ten"].AsString; double gia = document["DonGia"].AsDouble; lstProduct.Items.Add(ma + "\t" + ten + "\t" + gia); } } Kết quả: Ví dụ 2:Hãy viết lệnh hiển thị thông tin chi tiết của 1 Product có mã =P1MainWindow.xaml:-2 hàm Gt: builder.Gt(attribute,value): using System; using System.Collections.Generic; using System.Linq; using System.Text; 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; using MongoDB.Bson; using MongoDB.Driver; namespace CSharpMongoDBExample { /// /// Interaction logic for MainWindow.xaml /// public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void btnEQ_Gia_Click(object sender, RoutedEventArgs e) { MongoClient client = new MongoClient("mongodb://localhost:27017"); IMongoDatabase database = client.GetDatabase("QuanLySanPham"); IMongoCollection collection = database.GetCollection("Product"); var builder = Builders.Filter; var query = builder.Eq("DonGia", 150); List documents = collection.Find(query).ToList(); //là tên của 1 Listbox nào đó lstProduct.Items.Clear(); foreach (BsonDocument document in documents) { string ma = document["Ma"].AsString; string ten = document["Ten"].AsString; double gia = document["DonGia"].AsDouble; lstProduct.Items.Add(ma + "\t" + ten + "\t" + gia); } } private void btnEqMa_Click(object sender, RoutedEventArgs e) { MongoClient client = new MongoClient("mongodb://localhost:27017"); IMongoDatabase database = client.GetDatabase("QuanLySanPham"); IMongoCollection collection = database.GetCollection("Product"); var builder = Builders.Filter; var query = builder.Eq("Ma", "P1"); BsonDocument document = collection.Find(query).FirstOrDefault(); if(document!=null) { string ma = document["Ma"].AsString; string ten = document["Ten"].AsString; double gia = document["DonGia"].AsDouble; MessageBox.Show(ma + "-" + ten + "-" + gia); } else { MessageBox.Show("Ko thấy P1"); } } private void btnGtGia_Click(object sender, RoutedEventArgs e) { MongoClient client = new MongoClient("mongodb://localhost:27017"); IMongoDatabase database = client.GetDatabase("QuanLySanPham"); IMongoCollection collection = database.GetCollection("Product"); var builder = Builders.Filter; var query = builder.Gt("DonGia", 230); List documents = collection.Find(query).ToList(); //là tên của 1 Listbox nào đó lstProduct.Items.Clear(); foreach (BsonDocument document in documents) { string ma = document["Ma"].AsString; string ten = document["Ten"].AsString; double gia = document["DonGia"].AsDouble; lstProduct.Items.Add(ma + "\t" + ten + "\t" + gia); } } private void btnGteGia_Click(object sender, RoutedEventArgs e) { MongoClient client = new MongoClient("mongodb://localhost:27017"); IMongoDatabase database = client.GetDatabase("QuanLySanPham"); IMongoCollection collection = database.GetCollection("Product"); var builder = Builders.Filter; var query = builder.Gte("DonGia", 230); List documents = collection.Find(query).ToList(); //là tên của 1 Listbox nào đó lstProduct.Items.Clear(); foreach (BsonDocument document in documents) { string ma = document["Ma"].AsString; string ten = document["Ten"].AsString; double gia = document["DonGia"].AsDouble; lstProduct.Items.Add(ma + "\t" + ten + "\t" + gia); } } private void btnLtGia_Click(object sender, RoutedEventArgs e) { MongoClient client = new MongoClient("mongodb://localhost:27017"); IMongoDatabase database = client.GetDatabase("QuanLySanPham"); IMongoCollection collection = database.GetCollection("Product"); var builder = Builders.Filter; var query = builder.Lt("DonGia", 230); List documents = collection.Find(query).ToList(); //là tên của 1 Listbox nào đó lstProduct.Items.Clear(); foreach (BsonDocument document in documents) { string ma = document["Ma"].AsString; string ten = document["Ten"].AsString; double gia = document["DonGia"].AsDouble; lstProduct.Items.Add(ma + "\t" + ten + "\t" + gia); } } private void btnLteGia_Click(object sender, RoutedEventArgs e) { MongoClient client = new MongoClient("mongodb://localhost:27017"); IMongoDatabase database = client.GetDatabase("QuanLySanPham"); IMongoCollection collection = database.GetCollection("Product"); var builder = Builders.Filter; var query = builder.Lte("DonGia", 230); List documents = collection.Find(query).ToList(); //là tên của 1 Listbox nào đó lstProduct.Items.Clear(); foreach (BsonDocument document in documents) { string ma = document["Ma"].AsString; string ten = document["Ten"].AsString; double gia = document["DonGia"].AsDouble; lstProduct.Items.Add(ma + "\t" + ten + "\t" + gia); } } private void btnLteGteGia_Click(object sender, RoutedEventArgs e) { MongoClient client = new MongoClient("mongodb://localhost:27017"); IMongoDatabase database = client.GetDatabase("QuanLySanPham"); IMongoCollection collection = database.GetCollection("Product"); var builder = Builders.Filter; //lệnh kết hợp các hàm Filter dữ liệu: var query = builder.Gte("DonGia", 155) & builder.Lte("DonGia", 250); List documents = collection.Find(query).ToList(); //là tên của 1 Listbox nào đó lstProduct.Items.Clear(); foreach (BsonDocument document in documents) { string ma = document["Ma"].AsString; string ten = document["Ten"].AsString; double gia = document["DonGia"].AsDouble; lstProduct.Items.Add(ma + "\t" + ten + "\t" + gia); } } private void btnWhere_Click(object sender, RoutedEventArgs e) { MongoClient client = new MongoClient("mongodb://localhost:27017"); IMongoDatabase database = client.GetDatabase("QuanLySanPham"); IMongoCollection collection = database.GetCollection("Product"); var builder = Builders.Filter; var query = builder.Where(x => x["DonGia"] >= 155 && x["DonGia"] <= 250); List documents = collection.Find(query).ToList(); //là tên của 1 Listbox nào đó lstProduct.Items.Clear(); foreach (BsonDocument document in documents) { string ma = document["Ma"].AsString; string ten = document["Ten"].AsString; double gia = document["DonGia"].AsDouble; lstProduct.Items.Add(ma + "\t" + ten + "\t" + gia); } } } } Ví dụ 3:Sourcecode các ví dụ mẫu này tải ở đây Viết lệnh hiển thị tất cả các Product có Đơn giá lớn hơn 230 Kết quả (để ý không có sản phẩm có giá 230 hiển thị ở đây): -3 hàm Ge: builder.Gte(attribute,value) |