Skip to content

Latest commit

 

History

History
41 lines (40 loc) · 2.42 KB

2010-04-05-playing-around-with-mongo-db-in-net.markdown

File metadata and controls

41 lines (40 loc) · 2.42 KB
layout title date tags
post
Playing around with mongo db in .net
2010-04-05 15:51:00 +0200
asp.net_mvc c# mongodb

Ever since I heard of the NoRM driver for MongoDB I had to try my hands on it. You can find it here:
NoRM , mongodb

The first thing is setting up the server. I dropped the binaries into
C:\MongoDb<br>
Next thing I created two batch files.
To start the db: start.bat
C:\MongoDb\bin\mongod.exe --dbpath C:\MongoDb\data --port 27000 --logpath C:\MongoDb\log\mongodb.log --logappend

The other to access the mongo shell: shell.bat
C:\MongoDb\bin\mongo.exe --port 27000

Next thing is creating a simple asp.net MVC app that uses MongoDB for storage.

My object of choice is Product:
public partial class Product
{
public Product()
{
Id = ObjectId.NewObjectId();
}
[Column(IsPrimaryKey = true)]
public virtual ObjectId Id
{
get {return _id;}
set {_id = value;}
}
...
}
 The attribute is for the editor template. Next thing is the controller. Here is the helper for connecting to the database:
  public class ServerHelper
  {
    public static Mongo GetServer()
    {
      return Mongo.Create("mongodb://localhost:27000/MongoMvc");
    }

    public static MongoCollection Collection()
    {
      return GetServer().GetCollection("products");
    }
  }


Note that you don't need to do a create database or collection.

Insert is straightforward. In order to list all "products" I used an empty Find on the collection. To update I did the following:
    [HttpPost,ActionName("Edit")]
    public ActionResult EditPost(ObjectId id)
    {
      var collection = ServerHelper.Collection();
      var product = collection.FindOne(new{ _id = id });
      UpdateModel(product);
      collection.UpdateOne(new { _id = id }, product);
      return RedirectToAction("Index");
    }



Looks interesting. I've not delved into any deeper parts than this yet. I could probably have done this without the additional configuration.