Kết nối mongodb với c#

Ở bài số 4 các bạn đã biết cách tải và tham chiếu driver tương tác MongoDB trong C# rồi. Ở bài này chúng ta tiếp tục học cách kết nối và truy vấn dữ liệu MongoDB thông qua các Driver đó (bạn mở lại Project WPF trong bài số 4).

Mục tiêu bài này các bạn phải kết nối hiển thị được dữ liệu trong bảng Product lên giao diện Listbox trong WPF như dưới đây:

Kết nối mongodb với c#
Bước 1:

Làm thế nào để Kết nối dữ liệu MongoDB bằng C#?

Để kết nối tới MongoDB ta dùng lệnh sau:

//tham chiếu thư viện này:
using MongoDB.Driver;
//Dùng MongoClient để kết nối tới Server
MongoClient client = new MongoClient("mongodb://localhost:27017");
//Dùng lệnh GetDatabase để kết nối Cơ sở dữ liệu
IMongoDatabase database = client.GetDatabase("QuanLySanPham");

Các Em lưu ý lệnh:

mongodb://localhost:27017

Là cú pháp kết nối lên Server. Chúng ta chỉ đổi localhost thành tên Server(địa chỉ IP) và Port. Còn mọi thứ phải giữ nguyên. Đây là bản Standalone, nếu bạn đang dùng Replica Set thì thay đổi khác chút xíu (Đây là phần nâng cao, khoan hãy quan tâm).

Lệnh:

client.GetDatabase(“QuanLySanPham“);

Dùng để kết nối tới Cơ sở dữ liệu tên là QuanLySanPham, do đó bạn muốn kết nối tới Cơ sở dữ liệu khác thì đổi tên chỗ này là xong.

Bước 2:

Truy vấn dữ liệu, trong bài này ta sẽ truy vấn bảng Product nha.

//Gọi hàm GetCollection để truy suất bảng dữ liệu
IMongoCollection collection = database.GetCollection("Product");
//Muốn truy vấn toàn bộ dữ liệu trong bảng dùng lệnh dưới đây:
List documents = collection.Find(new BsonDocument()).ToList();

Để lấy dữ liệu từng đối tượng (JSON, vì sao nó là JSon thì các Em xem lại các bài trước, hoặc ở đây) trong documents ra ta làm như sau:

//Các em có thể hiểu document là 1 đối tượng đang duyệt (là Json) trong tập các Json được lưu trong biến documents
foreach (BsonDocument document in documents)
{
//Cột Ma (là thuộc tính Ma của đối tượng Product đang duyệt) có kiểu chuỗi
string ma = document["Ma"].AsString;
//Cột Ten (là thuộc tính Ten của đối tượng Product đang duyệt) có kiểu chuỗi
string ten = document["Ten"].AsString;
//Cột DonGia (là thuộc tính DonGia của đối tượng Product đang duyệt) có kiểu Double
double gia = document["DonGia"].AsDouble;

}

Coding chi tiết:

-Phần XAML (MainWindow.xaml):

-Phần Coding(MainWindow.xaml,cs):

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 btnGetProduct_Click(object sender, RoutedEventArgs e)
{
MongoClient client = new MongoClient("mongodb://localhost:27017");
IMongoDatabase database = client.GetDatabase("QuanLySanPham");

IMongoCollection collection = database.GetCollection("Product");
List documents = collection.Find(new BsonDocument()).ToList();
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);
}

}
}
}

Chạy lên ta sẽ kết quả như mong muốn!

Bạn có thể tải source code của bài này tại đây: Source code here

Bài sau ta sẽ nghiên cứu cách thức tải dữ liệu lớn từ MongoDB về client

Các khóa học online khác, bạn có thể tham khảo tại đây: http://communityuni.com/

Chúc các bạn thành công!

Nội dung bài viết

Video học lập trình mỗi ngày

Connect server MongoDB từ xa hay từ một server khác đó là một mô hình bình thường hiện nay. Bài viết này sẽ hướng dẫn cho người mới làm quen với mongodb có thể làm được điều mà chỉ có những chuyên về admin mới làm được.

Bài viết này có trong Series - Mongodb.

Để hiểu được và có thể thao tác được, trước tiên tôi mong muốn về cơ bản, bạn phải hiểu MongoDB là gì? Và đương nhiên là phải có những thao tác trên LINUX.

Bài học này bạn được những gì?

  • Cách tạo một database và tạo quyền truy cập vào db trên Mongoodb.
  • Cách cho phép mọi ip address connect từ xa tới MongoDB
  • Chỉ cho phép một số ip address truy cập từ xa tới MongoDB

MongoDB create user

Đầu tiên chính xác là bạn truy cập và ssh, và tạo một user trên mongodb mà chúng ta đã nói đến ở Mongodb create database and user terminal:

> db.createUser( 
  {
    user: "new_user",
    pwd: "some_password",
    roles: [ { role: "readWrite", db: "anonystick" } ]
  }
)

Enable MongoDB Auth

Đến bước này thì việc duy nhất là bạn tìm tới file config mongodb /etc/mongod.conf. Sau đó sửa file này như sau:

sudo vim /etc/mongod.conf

Sau khi mở ra thì tìm đến line này:

# network interfaces
net:
    port: 27017
    bindIp: 127.0.0.1

bindIp: chính là nơi chứa những ip address được cho phép truy cập. Mặc định là chỉ có connect bằng localhost.Đến đây không thể không nhắc đến vấn đề bảo mật trong mongodb, đó là mỗi lần config vui lòng backup mongodb sử dụng mongodump. Cẩn thận trên hết nhé các đồng chí.

Warning: Đừng có comment lại #bindIp. Nếu bạn làm như vậy đồng nghĩa với việc bạn sẽ cho phép tất cả các nơi truy cập vào admin MongoDB của bạn.

Giờ bạn muốn thêm một Server A truy cập đến Server chứa MongoDB thì hãy làm như sau: Đầu tiên bạn phải làm là sử dụng lệnh:

anonystick:~# ip a |grep net
    inet 127.0.0.1/3 scope host lo
    inet6 xxxx scope host 
    inet 12.13.14.15/23 brd xxxxx scope global dynamic ens3
    inet6 xxxxx/64 scope link

Để làm gì? Để bạn có thể thấy được ip address đang xài là gì? Ở đây chính là dòng thứ 3 12.13.14.15. Khi lấy được rồi bạn sửa lại file config trên như tôi đã nói :

# network interfaces
net:
    port: 27017
    bindIp: 127.0.0.1,12.13.14.15

Nghĩa là server khác sẽ truy cập và connect mongodb qua 12.13.14.15 này.

Restart mongo daemon (mongod)

Sau khi edit thành công thì đương nhiên phải reload lại mongo.

sudo service mongod restart

Sau đó check lệnh mongo lên xem. Hoặc bạn có thể sử dụng

tail -f /var/log/mongodb/mongod.log

Để theo dõi log...

Kết nối mongodb từ xa Và sau cùng là ta lấy server A connect tới bằng nhiều cách như Connect mongodb Nodejs, nhưng ở đâu tôi dùng Sell cho nhanh:

mongo -u ian -p secretPassword 12.13.14.15/abc

MongoDB security

Ở đây 12.13.14.15 chính là ip mình đã config ở trên kia. Tới bước này rồi, có thể là tạm thời nói rằng bạn đã thành công. Nhưng còn một chuyện đó là vấn đề bảo mật. Có ai đặt câu hỏi rằng, nếu như vậy thì tất cả có thể truy cập vào database từ xa, cho dù là ai? Đúng là như vậy, chính vì vậy một bước cuối cùng để MongoDB security chính là phải cấu hình lại, ip address nào được phép truy cập. Đó là việc điều chỉnh lại Firewall trong hệ thống. Bài viết này đã dài, cho nên tôi nghĩ sẽ để vấn đề này cho một bài viết khác có tên là "Adjusting the Firewall'.

Và đó là tất cả bài hướng dẫn của chủ đề ngày hôm nay. Xin chào!