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):

Hướng dẫn filter mongodb - bộ lọc mongodb
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.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.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):

varbuilder= Builders.Filter; builder= Builders<BsonDocument>.Filter;

Tên hàm
Ý nghĩa
builder.Eq(attribute,value)Eq(attribute,value) Lọc ra các phần tử mà attribute của nó có giá trị là valueattribute của nó có giá trị là value
builder.Gt(attribute,value)Gt(attribute,value) Lọc ra các phần tử mà attribute của nó có giá trị  lớn hơn valueattribute của nó có giá trị  lớn hơn value
builder.Gte(attribute,value)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 valueattribute của nó có giá trị lớn hơn hoặc bằng value
builder.Lt(attribute,value)Lt(attribute,value) Lọc ra các phần tử mà attribute của nó có giá trị nhỏ hơn valueattribute của nó có giá trị nhỏ hơn value
builder.Lte(attribute,value)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 valueattribute của nó có giá trị nhỏ hơn hoặc bằng value
builder.Where (LINQ Expression)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)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ướng dẫn filter mongodb - bộ lọc mongodb
Ví dụ 2:

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ả:

Hướng dẫn filter mongodb - bộ lọc mongodb
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:

Hướng dẫn filter mongodb - bộ lọc mongodb
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:

Hướng dẫn filter mongodb - bộ lọc mongodb
Viết lệnh hiển thị tất cả các Product có Đơn giá lớn hơn hay bằng 230 builder.Lt(attribute,value)

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:

Hướng dẫn filter mongodb - bộ lọc mongodb
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:

Hướng dẫn filter mongodb - bộ lọc mongodb
Viết lệnh hiển thị tất cả các Product có Đơn giá nhỏ hơn hay bằng 230

Kế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ả:

Hướng dẫn filter mongodb - bộ lọc mongodb
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ả:

Hướng dẫn filter mongodb - bộ lọc mongodb
Ví dụ 2:

Hướng dẫn filter mongodb - bộ lọc mongodb
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)