Basics of MongoDB with .Net
Watch the “Introduction to MongoDB”
http://www.youtube.com/watch?v=iRDOGkFKBRw&feature=player_embedded#at=95
Download MongoDB for Windows 64bit:
http://www.mongodb.org/downloads
Unzip to C:Mongo
Follow these instructions for installation:
http://www.mongodb.org/display/DOCS/Quickstart+Windows
Run these two applications (can be setup as a Windows Service)
- Mongod.exe first (which will stay open)
- Mongo.exe second, which will run and connect to Mongod.exe
Now connect to your Test database:
- Open a command prompt.
- Browse to c:Mongobin
- Type: mongod
- Make sure you leave this running (this is your database server)
Alternatively you can create a shortcute with:
Target: C:WindowsSystem32cmd.exe /k mongod
Start in: C:Mongobin
Create your first document:
- Open a new command prompt.
- Browse to c:Mongobin
- Type: mongo (this connects you to the database server running locally)
- Type: db and hit enter to see what database you’re connected to.
- Type:db.foo.insert({a:1}) (inserts a document)
- Type: db.foo.find() (does a search on the document database)
Great!
.Net Setup for MongoDB
Download drivers for MongoDB C# and .Net.
MongoDB C# driver MSI:
https://github.com/mongodb/mongo-csharp-driver/downloads
Download and run.
Community supported driver:
https://github.com/samus/mongodb-csharp
Download to C:MongoCommunityCSharpDriver
You can drop the 3 .DLLs into your .Net project.
MongoDB.Driver.dll
MongoDB.GridFS.dll
MongoDB.Linq.dll
.Net Sample Web Application
Create a new web application in Visual Studio 2010 (or 2008)
Add the 3 reference DLLs.
Create/Open a Default.aspx.cs file and connect to your test Mongo Database:
Drop some controls on (I’m using Telerik’s RadGrid in this example)
<form id="form1" runat="server"> <div> Create a new Mongo Database:<br /> Name: <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Create" /> <br /> <br /> <asp:Button ID="Button2" runat="server" onclick="Button2_Click" Text="View Results" /> <br /> Results<telerik:RadGrid ID="RadGrid1" runat="server"> </telerik:RadGrid> </div> <telerik:RadScriptManager ID="RadScriptManager1" Runat="server"> </telerik:RadScriptManager> </form>
Add some code:
protected void CreateMongoDB(String dbName) { //mongod.exe must be running for this to work. var mongo = new Mongo(); mongo.Connect(); //if the database is not found in c:datadb it will be created. var db = mongo.GetDatabase(dbName); //declare a new "table" var categories = db.GetCollection("categories"); //create a new key value set var document = new Document(); document["Name"] = "Product"; document["Name"] = "Price"; //create the "tabt" categories.Insert(document); mongo.Disconnect(); }
And the button call:
protected void Button1_Click(object sender,EventArgs e) { String name = TextBox1.Text; CreateMongoDB(name); }
Run it.
Now you can create MongoDB’s through a web form.
Filling a Grid with the Results
We’ll jump ahead a tiny bit to where you’ve added some documents to one of your MongoDB’s.
Mine is called TestProducts.
Each document has a Name and a Price.
Add some more code to default.aspx.cs
protected String GetMongoDBResults(String dbName) { //mongod.exe must be running for this to work. var mongo = new Mongo(); mongo.Connect(); //if the database is not found in c:datadb it will be created. var db = mongo.GetDatabase(dbName); //declare a new "table" var categories = db.GetCollection("categories"); //get the categories table var category = categories.FindOne(new Document() { { "Name","Price" } }); //alternatively you can get all documents in the database var documents = categories.FindAll().Documents; String res = category["Name"].ToString(); //diconnect mongo.Disconnect(); //return results in a EF friendly shapre just because that's what I'm working with mostly nowadays return res; }
Add the button call code:
protected void Button2_Click(object sender,EventArgs e) { RadGrid1.DataSource = GetMongoDBResults(TextBox1.Text); RadGrid1.DataBind(); }
Run it.
Now you can fill a Grid with data from your MongoDB.