Ở 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.json
Driver .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<BsonDocument>.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):
var builder = Builders<BsonDocument>.Filter;
Tên hàm |
Ý nghĩa |
builder.Eq(attribute,value) | Lọc ra các phần tử mà attribute của nó có giá trị là value |
builder.Gt(attribute,value) | Lọc ra các phần tử mà attribute của nó có giá trị lớn hơn value |
builder.Gte(attribute,value) | Lọc ra các phần tử mà attribute của nó có giá trị lớn hơn hoặc bằng value |
builder.Lt(attribute,value) | Lọc ra các phần tử mà attribute của nó có giá trị nhỏ hơn value |
builder.Lte(attribute,value) | Lọc ra các phần tử mà attribute của nó có giá trị nhỏ hơn hoặc bằng value |
builder.Where (LINQ Expression) |
Lọc kết hợp nhiều điều kiện |
Chi tiết cách sử dụng:
-1.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
[code language=”csharp”]
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);
}
}
[/code]
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
[code language=”csharp”]
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”);
}
}
[/code]
Kết quả:
-2 hàm Gt: builder.Gt(attribute,value)
Ví dụ 3:
Viết lệnh hiển thị tất cả các Product có Đơn giá lớn hơn 230
[code language=”csharp”]
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);
}
}
[/code]
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)
Ví dụ 4:
Viết lệnh hiển thị tất cả các Product có Đơn giá lớn hơn hay bằng 230
[code language=”csharp”]
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);
}
}
[/code]
Kết quả (để y có sản phẩm có giá 230 hiển thị ở đây):
-4 Hàm Lt: builder.Lt(attribute,value)
Ví dụ 5:
Viết lệnh hiển thị tất cả các Product có Đơn giá nhỏ hơn 230
[code language=”csharp”]
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);
}
}
[/code]
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)
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 230
[code language=”csharp”]
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);
}
}
[/code]
Kết quả (Để ý có sản phẩm có giá 230 hiển thị ở đây):
Ví dụ 7:
Hãy kết hợp Lte và Gte (hoặc Lt với Gt) để lọc ra các Sản phẩm có giá từ 155 đến 250
[code language=”csharp”]
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);
}
}
[/code]
Kết quả:
-7- Hàm Where: builder.where(LINQ Expression)
Ví dụ 8:
Dùng hàm Where để lọc ra các Sản phẩm có giá từ 155 đến 250 (ở ví dụ 7 ta đã làm bài này bằng cách kết hợp Lte và Gte)
[code language=”csharp”]
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);
}
}
[/code]
Kết quả:
Tổng hợp 8 Ví dụ trên ta có giao diện như dưới đây:
[code language=”xml”]
[/code]
Mã nguồn toàn bộ chương trình (MainWindow.xaml.cs):
[code language=”csharp”]
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);
}
}
}
}
[/code]
==>Sourcecode các ví dụ mẫu này tải ở đây
Bài sau ta sẽ nghiên cứu cách thức Binding dữ liệu MongoDB lên ListView trong C# WPF để hiện thị dữ liệu dạng lưới các thông tin của Product để dễ quan sát cũng như hỗ trợ cho các bài toán về Sắp xếp dữ liệu.
Các khóa học online khác, bạn có thể tham khảo tại đây:
Chúc các bạn thành công!
5 thoughts on “Bài 7 – Các Kỹ thuật filter dữ liệu trong MongoDB với C#”