--以下借用于 http://www.cnblogs.com/lipan/archive/2011/03/08/1977691.html
传统的关系数据库一般由数据库(database)、表(table)、记录(record)三个层次概念组成,MongoDB是由(database)、集合(collection)、文档对象(document)三个层次组成。MongoDB对于关系型数据库里的表,但是集合中没有列、行和关系概念,这体现了模式自由的特点。
一、关于MongoDB的驱动
MongoDB支持多种语言的驱动,在此我们只介绍C#的驱动。仅C#驱动都有很多种,每种驱动的形式大致相同,但是细节各有千秋,因此代码不能通用。比较常用的是官方驱动和samus驱动。samus驱动除了支持一般形式的操作之外,还支持linq方式操纵数据。各人比较喜欢这种方式。
官方驱动下载地址:点击下载
samus驱动下载地址:点击下载
本篇将从samus驱动入手讲解数据库访问,国际惯例,存取“Hello World!”。
二、通过samus驱动实现HelloWorld存取
在进行下述操作之前,请先确定MongoDB服务已经开启,不知道怎么开启服务,请看上篇。下载驱动,新建控制台项目,并添加对MongoDB.dll的引用,如果你下载的是驱动源码,编译一遍引用生成的DLL即可。
-----------------------------------------------------------
实例代码如下:
using MongoDB;
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
//链接字符串
private string connectionString = "mongodb://localhost";
//数据库名
private string databaseName = "myDatabase";
//集合名
string collectionName = "myCollection";
//定义Mongo服务
Mongo mongo;
MongoDatabase mDatabase;
MongoCollection<Document> mCollection;
public MainWindow()
{
InitializeComponent();
mongo = new Mongo(connectionString);
//获取databaseName对应的数据库,不存在则自动创建
mDatabase = mongo.GetDatabase(databaseName) as MongoDatabase;
mCollection = mDatabase.GetCollection<Document>(collectionName) as MongoCollection<Document>;
mongo.Connect();
}
~MainWindow()
{
mongo.Disconnect();
}
private void rb_add_Click(object sender, RoutedEventArgs e)
{
tb_Name.IsEnabled = true;
}
private void rb_update_Click(object sender, RoutedEventArgs e)
{
tb_Name.IsEnabled = true;
}
private void rb_del_Click(object sender, RoutedEventArgs e)
{
tb_Name.IsEnabled = false;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
if (rb_add.IsChecked.HasValue && rb_add.IsChecked.Value)
{
Document doc = mCollection.FindOne(new Document { { "ID", tb_ID.Text.Trim() } });
if (doc != null && doc.Count > 0)
{
doc["Name"] = tb_Name.Text.Trim();
mCollection.Save(doc);
}
else
{
Document addDoc = new Document();
addDoc["ID"] = tb_ID.Text.Trim();
addDoc["Name"] = tb_Name.Text.Trim();
mCollection.Insert(addDoc);
}
}
if (rb_update.IsChecked.HasValue && rb_update.IsChecked.Value)
{
Document doc = mCollection.FindOne(new Document { { "ID", tb_ID.Text.Trim() } });
if (doc != null && doc.Count > 0)
{
doc["Name"] = tb_Name.Text.Trim();
mCollection.Save(doc);
}
}
if (rb_del.IsChecked.HasValue && rb_del.IsChecked.Value)
{
Document doc = mCollection.FindOne(new Document { { "ID", tb_ID.Text.Trim() } });
if (doc != null && doc.Count > 0)
{
mCollection.Remove(doc);
}
}
var allResult = mCollection.FindAll().Documents;
lb_result.Items.Clear();
foreach (Document item in allResult)
{
lb_result.Items.Add(item["ID"] + " " + item["Name"]);
}
}
}
XAML 代码
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" x:Class="Mongodb.MainWindow"
Title="MainWindow" Height="350" Width="374">
<Grid>
<TextBlock HorizontalAlignment="Left" Margin="72,49,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="30.557"><Run Language="zh-cn" Text="ID:"/></TextBlock>
<TextBox x:Name="tb_ID" Margin="106.557,43,0,0" TextWrapping="Wrap" Text="1" VerticalAlignment="Top" HorizontalAlignment="Left" Width="214.487"/>
<TextBlock HorizontalAlignment="Left" Margin="49,68.836,0,0" TextWrapping="Wrap" VerticalAlignment="Top"><Run Language="zh-cn" Text="Name:"/></TextBlock>
<TextBox x:Name="tb_Name" Margin="106.557,68.836,0,0" TextWrapping="Wrap" Text="seelingzheng" VerticalAlignment="Top" HorizontalAlignment="Left" Width="214.487"/>
<Button Content="OK" Click="Button_Click" HorizontalAlignment="Right" Margin="0,119,162,0" VerticalAlignment="Top" Width="75"/>
<RadioButton x:Name="rb_add" Click="rb_add_Click" Content="Add" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="72,17.163,0,0" IsChecked="True"/>
<RadioButton x:Name="rb_update" Click="rb_update_Click" Content="update" Margin="131.853,17.163,0,0" VerticalAlignment="Top" HorizontalAlignment="Left"/>
<RadioButton x:Name="rb_del" Click="rb_del_Click" Content="del" Margin="211.853,17.163,0,0" VerticalAlignment="Top" HorizontalAlignment="Left"/>
<ListBox x:Name="lb_result" Height="100" Margin="23,0,0,56" VerticalAlignment="Bottom" HorizontalAlignment="Left" Width="307"/>
</Grid>
</Window>
结果图片