Sunday, October 18, 2015

The Famous MongoDB Document Database: Operations and Benefits

This is a guest post from Jenny Richards. Jenny Richard is a content maker for which is one of the leading companies in the country which provides remote DBA support Services. You can find more about her at following social profiles.

Over the last few years, a lot of enterprise attention has been focused on data requirements and data management and administration. The reason for this is clear: proper management of an enterprise’s information assets is critical to effective operation. Enterprises stand to gain a lot if they have in place systems that facilitate proper management of data streaming in from all sources.

Improper storage and management of data also presents a challenge, particularly with subsequent management and analysis to inform decision making and business critical process management. as a result, countless technologies are being developed and churned into the market to enable data storage, analytics and management. These technologies are also constantly being upgraded according to user requirements to make them better suited for different enterprises’ needs.

Image credit:

One such technology is the MongoDB, which is just about the best NoSQL, document storage-based database available on the market. If you are looking to implement a data storage solution, you will be interested in a few important qualities, which will explain why best one database is suited for your needs but not the other.

Among the most important considerations is the performance level of the database, as well as the level of availability. You would want to have a database that allows for the highest performance and also one that is available for a large portion of time. These are databases which offer replicated services, including master failover systems. In addition, enterprises need databases that offer seamless scalability, so that the database can be easily grown as organizations/ data volumes increase.

Enterprise requirements for a database solution

Every database must include capabilities to perform a few key functions. In addition, they should have fast learning curves, since the enterprise may have to take up initial and ongoing training for its IT staff if using in-house teams. Organizations that invest in implementation of new database systems without accounting for the training of management personnel are simply setting themselves up for failure.

Every database, MongoDB included, comes with a unique set of features and operational and maintenance requirements. This means that for you to derive maximum benefit and optimal performance from each, you must assign the time and resource allocation for training of the database handlers. If you are unable to, you can instead go with remote DBA services experts, who are already trained in management and can provide maintenance and administration support for a fixed fee payable periodically.

Of course, you should also consider how much data the enterprise needs to store, both in the short and longer term. You don’t want to invest in hardware and applications that will be obsolete just a few years into your investment. As the business grows and its data requirements increase, you need a database solution that can scale accordingly and allow you to manage the content effectively.

MongoDB offers easy, seamless scalability on implementation. In addition, being a NoSQL database storing data in BSON format, there is no need for schema definition which means faster data storage and retrieval. In addition, binary JSON allows fast performance of queries for effective content management.

Why MongoDB is superior to other document-based databases:

There are many features that make MongoDB a preferred NoSQL database solutions compared with other similar databases in the market:
  • The document-based storage method enables seamless object mapping onto various data types and programming languages. It includes documents and embedded arrays which significantly reduce the need for connectors.
  • Polymorphism is made simpler owing to its dynamic schema storage method. Dynamic schema in database terms means that documents found within one collection needn’t have the same structure, or a similar set of fields. In turn, similar/common fields within the same document collection can have different data types.
  • MongoDB is optimized for high performance. Read/write operations are faster because of embedding capability. In addition, keys from embedded arrays and documents can be included within indexes.
  • The database offers high availability owning to replicated servers and automated mater failover implementation.
  • ·High scalability made possible by auto-sharding features to distribute collection data along machines. Consistent reads can also be dispersed throughout the replicated servers.
Image credit:

Key features of MongoDB:

The main features of MongoDB are defined by its power, flexibility, ease of use and speed

1. Power

MongoDB offers most of the features included in traditional RDBMSs including: dynamic queries, secondary indexes, upsert operations (update existing documents, insert non-existent documents), rich updates, easy aggregation and sorting. This means you can enjoy the same level of functionality you would using an RDBMS, while still taking advantage of the scalability and flexibility benefits presented by non-relational models.

2. Flexibility

MongoDB stores data in JSON document format (JavaScript object notation) which is them serialized as BSON (Binary JSON). JSON offers a rich data model that can flawlessly map onto programming language types for native apps. In addition, its dynamic schema feature allows easier evolution of data models compared with RDBMS systems that have defined schema, rigid schemas.

3. Ease of use

MongoDB was designed by its creators to have easy installation, configuration, maintenance and usability functions. In this regard, MongoDB comes with few options for configuration, instead opting for the logically “right thing” according to the circumstance. As a result, MongoDB can be used straight out of the box, allowing you to concentrate on application development rather than spending countless hours tweaking vague database configurations

4. Scalability/speed

In MongoDB, related data is grouped into documents, which means that queries can be run much faster. This in comparison to relational databases; where related data may be separated in multiple tables because of different schema definition, necessitating connection prior to processing at a later time.

The auto-sharding feature in MongoDB allows for easy outward scaling - clusters can be linearly scaling by increasing the number of machines. In addition, the database can be scaled outwards without having any downtime. This is extremely important for enterprises with a web presence, since it eliminates the need to take down the website for maintenance, during which time the business sacrifices huge amounts in actual and potential revenue. 

Three way to activate state in UI-Router Angular.js

Before some time I have written a blog post about routing - Routing with UI-Router and Angular.js I have got few questions from my reader in email. One of question is to how we can activate state of UI-Router as UI-Router works with state instead of URLs. In this blog post we are going to explain, different ways to activate state in UI-Router.

There are three ways of activating state in UI-Router.

  1. Call $State.go
  2. UI-sref directive as link
  3. Navigate to URL associated with State
We are going to learn about this three ways in details.

Call $State.Go:

It is a one of convenient method of changing state, Returns a promise representing the state of transition. It calls underlying $State.Transition method internally but automatically sets option location: true , inheritance:true, relative: $state.$current and notify:true. This allows you to set easily update parameters with passing arguments. You can find more information about that at following location.

UI-sref directive as link:

We have used this method already in previous example. It is a directive that bind a link to state. If the state has an associated URL, the directive automatically generate and update the href attribute via $State.href() method. Clicking on link will trigger a state transition with parameters.
You can use it in following way.
  • ui-sref='stateName' - Navigate to state, no params. 'stateName' can be any valid absolute or relative state, following the same syntax rules as $state.go()
  • ui-sref='stateName({param: value, param: value})' - Navigate to state, with params.
You an find more information about this at following location.

Navigate to the URL associated with State:

As we have seen in previous blog post, most of the state will have URL associated with it. Now when user access the index.html/contactus, it will activate contactus state and load the template associated with this state. You can also pass the parameters with that. Following is documentation for the same.

Hope you like it, Stay tuned for more!!.
Friday, October 9, 2015

Best way to do code review with GIT

Recently we had a discussion when you should do a code review when using GIT. As a general rule you should do code review often.There are two ways to do code review with GIT.

1) Classic way:


We all know that GIT is known for it's feature branch features. So each developer working on some feature should have created feature set. That features branch is accessible to all the peers working on same project. So when developer completes his changes and push to feature branch anybody from his/her peers can checkout branch and perform code review.  The problem with this method is we don't have any records for the code review in source control it self.

2) Integration Way:


This is best method for doing code review. As we all know GIT provides pull request feature. So we will have two type of branches one is master branch for project and another feature branches for each developer working on different features of project. So now once a developer completes his feature and feels that its ready to push developer will send a pull request to master branch. Now the person or lead who are managing master branch will perform a review of pull request and either accept pull request and merged into code or if he found a some issue with code he can also reject pull request also with proper comments. So here we can easily perform code review with GIT and all data remains same. Most of the open source project on Github maintained this way only.

Hope you like it. Stay tuned for the more!.
Thursday, October 8, 2015

Arguments in View Component : ASP.NET MVC 6

Recently before sometime, I have written a blog post about What's new in View Component : ASP.NET MVC 6. I have got lots of page view for that blog post and I am thank full to my readers for that. I got email from one of the readers that how we can pass arguments in View Component or how we can filter data in view component? I'm sure lots of people will have same question. So I thought it will a good idea to write a blog post about it.

I'm going to use same application which we have used for previous blog post. In previous application we created Product Categories View Component in this blog post I'm going to create a method in same view component which will display data based on category id passed.

So  now code for the view component will look like following.
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNet.Mvc;
using ViewComponentMVC.Models;

namespace ViewComponentMVC
    [ViewComponent(Name = "ProductCategoriesComponent")]
    public class CategoryViewComponent : ViewComponent
        private readonly List<Category> _categories;
        private CategoryViewComponent()
            _categories = new List<Category>()
               new Category {CategoryId = 1, Name = "Clothes",Description = "Men and women's clothes"},
               new Category {CategoryId = 2, Name = "Elentronics", Description = "Eletronics"}
        public IViewComponentResult Invoke()
            return View(_categories);

        public IViewComponentResult Invoke(int categoryId)
            var category = _categories.FindAll(c => c.CategoryId == categoryId).ToList();
           return View(category);

If you see above code then you will realize that I have made category list read-only and used in both invoke methods. And created a new Invoke method that expects a category id as parameter and based on category id it will filter categories list with linq and return a view.

Now I have putted same thing in about view like following.
    ViewData["Title"] = "About";


Now when you run this application it load home page with both categories like following.

Now when you click on about and see same view filtration it will look like following.


That's it. Hope you like it. You can see how its easy to pass argument and override invoke method in ASP.NET MVC 6. Stay tuned for more!.
You can find complete source code of this and earlier blog post  at following location on github-
Tuesday, October 6, 2015

What's new in View Component : ASP.NET MVC 6

There are lots of new features added with ASP.NET MVC 6 and View components is one of them.  In this blog post we are going to learn about View Component in ASP.NET MVC 6 in detail.

What is View Components and how it is different from partial views:

As per ASP.NET official web site
New to ASP.NET MVC 6, view components (VCs) are similar to partial views, but they are much more powerful. VCs include the same separation-of-concerns and testability benefits found between a controller and view. You can think of a VC as a mini-controller
So the first question comes in our mind is why we need a View Component as all? As partial views are there and its serving its purpose very well.  But if you have worked with partial views you know that there is a limitation for partial views you can not have controller associated with it. You have to use Child actions with partial views and as you now when you mark any actions with child actions it will only allow for child you can not use that as a complete action. Also it will make a extra server trip which could make your application slow if you have a very complex view.  That where View Component can help.  It's contains a view and backing class It's not a 100% controller but it acts like a controller.

Let's create a View component that can be reused at multiple places. Think about a ECommerce application where you have multiple product categories which can be displayed multiple places in ECommerce application. We are going to create a view component that will list multiple categories.

How to create View Component in ASP.NET MVC 6 Application:

So to create a View component we need a ASP.NET 5 ASP.NET MVC 6 application. So have created web application from Visual Studio 2015.


Then created a model class category for storing categories information.
namespace ViewComponentMVC.Models
    public class Category
        public int CategoryId { get; set; } 
        public string Name { get; set; }
        public string Description { get; set; }
Then created a View component with following code.
using System.Collections.Generic;
using Microsoft.AspNet.Mvc;
using ViewComponentMVC.Models;

namespace ViewComponentMVC
    [ViewComponent(Name = "ProductCategoriesComponent")]
    public class CategoryViewComponent : ViewComponent
        public IViewComponentResult Invoke()
           var categories = new List<Category>()
               new Category {CategoryId = 1, Name = "Clothes",Description = "Men and women's clothes"},
               new Category {CategoryId = 2, Name = "Elentronics", Description = "Eletronics"}
            return View(categories);

Here there are three things to notice

  1. I have inherited class from ViewComponent from Microsoft.AspNet.MVC name space
  2. I have created a invoke method which will return data for the view. In our case we have created manual list as we don't need database for this example. But you can write any code for the same.
  3. See view component attribute on the top of class. We need to use same name when call this view component.
Now it's time to create a view for the view component. I have created this component under /Views/Home/Components/ProductCategoriesComponent/default.html as we have given same name in attribute. As this view component is used home/index.cshml I have putted there but if you have generic view than you can put that in share component also. Following is a code for the same. A simple ul-li listing.
@model IEnumerable<Category>
   @foreach (var category in Model)
       <li>@category.Name </li>
Now it's time to use this view component in one of view. I have putted following code in Views/Home/Index.cshtml.
When you run this application, It will look like following in browser


So you can see how our hard code categories renders under view. Even you can passed argument with view component invocation that we will see in future blog post.
You can find complete source code of this application at following location on github-
Hope you like it. Stay tuned for more!!
Saturday, October 3, 2015

Routing with UI-Router and Angular.js

In Today's world, Angular.js is one of best JavaScript framework available to create Single page applications. It's provides some great features and with the help of this features we can built great interactive apps. In any single page application routing is very important as in most of the time single page application will not have full post backs. So routing will be very important to give feel like normal page application and sometimes proper routing will increase search engine ranking also.

So in this blog post we are going to learn how we can create routes in Angular.js application with help of UI-Router.

What is UI-Router:

UI-Router is a routing frame work created Angular.js team and its not a part of Angular.js But it built on top of Angular.js. You can say it's a 3rd-Party module and is very powerful. It support most of things that we can do with ng-route and also do many other stuff that is not possible with ng-route.
You can find more information about UI-Router at following link.

Here are few features that is provided by UI-Router.
  1. UI-Router allows nested views and multiple views
  2. It allows you to strong type linking between state based on state names.
  3. State allows you to map and access different information about different states and you can easily pass information between states via $Stateparams parameter.
  4. With states approach your views are not tied to the URL and it is tied to states. Which can be very useful in large applications as you can change UI part without changing URLs.
  5. You can also change Partial UI of application which is not possible with ng-route.

So what are we waiting for let's create a sample application with UI-Router and Angular.js.

Sample application with UI-Router:

I'm going to use visual studio for creating this sample application. So that we can use IIS local express to host this application. I'm going to create web application.


We are going to use empty web forms application as we are not going to use code here it's a simple HTML page application to demonstrate the power of UI-Router.

We are going to create sample application with 3 pages.
  1. Home
  2. About Us
  3. Contact Us

So for that we need three html pages which will acts as partial views just like ASP.NET MVC partial views or user control in ASP.NET Web Forms.
I'm going to create a very basic HTML pages with following code.
home.html page code:
About Us HTML page code:
<h1>About us page</h1>
Contact Us HTML page code:
<h1>contact us </h1>
And now we are going create index.html and following is a code for that.
<!DOCTYPE html>
<html lang="en" xmlns="">
    <meta charset="utf-8" />
    <title>Angular UI Router Demo</title>
    <script src="" type="text/javascript"></script>
    <script src=""></script>
    <script src="app.js"></script>
<body ng-app="routerDemoApp">
    <ul >
        <li><a ui-sref="home">Home</a></li>
        <li><a ui-sref="aboutus">About us</a></li>
        <li><a ui-sref="contactus">Contact us</a></li>
    Angualr UI Router Demo
    <div ui-view></div>
If you see above code you can see I have added angular.js and angular-ui-router-min.js JavaScript files from the cloud flare CDN and then I have created a ng-app "routerDemoApp" with body tag of html page. I have used UL and Li ta and UI-Sref to create link for our routes. Here also notice ui-view tag in one of div where html pages will be rendered in this div.

So now basic infrastructure is ready now its time to create JavaScript code for our application. So lets create app.js file and write code like following.
// JavaScript source code
var routerDemoApp = angular.module('routerDemoApp', ['ui.router']);

routerDemoApp.config(function ($stateProvider, $urlRouterProvider) {


        .state('home', {
            url: '/home',
            templateUrl: 'home.html'
        .state('aboutus', {
            url: '/aboutus',
            templateUrl: 'aboutus.html'
        .state('contactus', {
            url: '/contactus',
            templateUrl: 'contactus.html'

So if you see above code carefully, Here I have created a angular app module called routerDemoApp and I have injected dependency of UI-Router. Then in config function we have created different states for Home, About Us and Contact Us. You can see I have passed two parameter url and template url for each state with respective html pages. Also I have written otherwise function which will return home state by default.

Now let's run this application in browser.


So by default Home page is loaded as you can see and in URL also you have /home now when you click on About us it will load about us page like following.


So it's very easy to create routing with Angular UI-Router in future post we will see how we can use nested view and multiple view.
You can find complete source code of this application at github on-
Hope you like it. Stay tuned for more!.
Friday, October 2, 2015

Convert C# Object into JSON and vice versa using Jil

I have also written couple of posts about converting C# object into JSON and vice versa. Following is a list of post for the same.

Converting a C# Object into JSON string
How to convert C# object into JSON string with JSON.NET

In this blog post we will learn about how we can convert C# object into JSON with Jil- Fast .NET JSON (De)Serializer, Built On Sigil an open source library by stack exchange team.

What is Jil:

Jil is a open source (De) Serializer library written by Kevin Montrose and stack exchange team. It is built on Sigil- with a number of crazy optimization tricks.Sigil is also a custom fast validation helper for .NET CIL Generation. Jil is one of fastest Serializer and deserializer library. It is also open source. You can find more information about at following link.


So let's create example which demonstrate both Serializing and Deserializing object. So first we will create JSON string from C# object via serializing with Jil and then we again deserialize that string to C# object. I'm going to create a console application for this.


After creating a application first thing we have to do is to add Nuget package from JIl via following command.


I'm going to use a Employee class for this example which have four properties Employee Id, First Name, Last Name and Designation.
namespace CsharpJSON
    public class Employee
        public int EmployeeId { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Designation { get; set; }
Then I have created a function Get Employee function to initialize Employee class with some data.
private static Employee GetEmployee()
    var employee = new Employee
        EmployeeId = 1,
        FirstName = "Jalpesh",
        LastName = "Vadgama",
        Designation = "Technial Architect"
    return employee;
Now it's time to serialize that employee class into JSON string so I have created  Serialize Employee function.
private static string SerializeEmployee(Employee employee)
    using (var output = new StringWriter())
        return output.ToString();
Here you can see I have use JSON.Serialize function which serialize C# object into string writer. Same way I have created Deserialize Employee function to deserialize JSON string created by previous function.
private static Employee DeserializeEmployee(string employeeString)
    return JSON.Deserialize<Employee>(employeeString);

Here you can see I have used  JSON. Deserialize function to convert JSON string into C# object. Finally I have called this function in my console application Main method and print it with Console.Writeline method.
static void Main(string[] args)
    var employee = GetEmployee();
    string employeeSerializedString = SerializeEmployee(employee);

    Console.WriteLine("Serialize Employee");

    Console.WriteLine("\n\nDeserializing Employee");
    var employeeDeserialized = DeserializeEmployee(employeeSerializedString);



Now when you run application it will generate output like following.


You can find complete source code of this application at following location on GitHub-

Hope you like it. Stay tuned for more!

A Better Solution to create PDF with Rotativa and ASP.NET MVC

In most of the line of business application we need some kind of reports. Now days we need those reports as PDF format as it is the most convenient way of storing documents. I have written a post about creating a PDF in ASP.NET MVC with Razor PDF and it is one of the top visited page on my blog.

Creating PDF with ASP.NET MVC and RazorPDF

But now I have found a better way to create a PDF with ASP.NET MVC so I thought it will be a good idea to write a blog post about it. So in this blog post we are going to learn about creating PDF with ASP.NET MVC with the use of Rotativa as open source framework for creating PDF with ASP.NET MVC.

What is Rotativa:

It is a framework created by Giorgio Bozio with the purpose of creating PDF in ASP.NET MVC extremely easy way. It is based on wkhtmltopdf tool to create PDF from html content rendered on browser. It uses the web kit engine which is used by Safari and Chrome browser to render html. And support most of HTML tags and styles. It is a open source command line tools so Giogio has created a nuget package to use this tool as PDF creator. You can find more information about Rotativa from the following links.

You can find source code of rotativa-

Now let's create example to demonstrate the power of Rotativa with ASP.NET MVC

Creating PDF with ASP.NET MVC and Rotativa:

So to create example, I have created a ASP.NET MVC application.


The first thing we need to do is to add Rotativa Nuget Package in our application.

Here is the model class I have used to demonstrate power or Rotativa.
namespace MvcPdf.Models
    public class Customer
        public int CustomerId { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string ProfileImage { get; set; }
In this example, we are not going to use any database so we are going to hardcode data in customer. so We have done is hardcode list of customer in controller and returning it to a view.
using MvcPdf.Models;
using Rotativa;
using System.Collections.Generic;
using System.Web.Mvc;

namespace MvcPdf.Controllers
    public class CustomerController : Controller
        private List<Customer> _customers;

        public CustomerController()
            var imagePath = "profile.jpg";
            _customers = new List<Customer>()
                new Customer {CustomerId = 1, FirstName = "Jalpesh",
                               LastName = "Vadgama", ProfileImage = imagePath},
                new Customer {CustomerId = 1, FirstName = "Vishal", 
                               LastName = "Vadgama", ProfileImage = imagePath}

        // GET: Customer
        public ActionResult Index()
            return View(_customers);

And in view we has displayed this list as table like following.
@model List<MvcPdf.Models.Customer>

    ViewBag.Title = "PDF Title";

<h2>Convert to  PDF</h2>

<table class="table">
        <td class="alert-success">First Name</td>
        <td class="alert-info">Last name</td>
        <td style="background-color: yellow;">Profile Image</td>
    @foreach (var item in Model)

            <td><img src="@Url.Content("~/content/" + Path.GetFileName(item.ProfileImage))" alt="" width="100" height="100" /></td>

@Html.ActionLink("Print", "Print", "Customer")
If you see in above code, I have used a image to display profile pic. I have also used different styles for td element in table to display power of Rotativa. Even I have used hardcoded style directly.  At bottom I have created  Html Action link to print this view as PDF and following is a code the printing this view as PDF in Action Result.
public ActionResult Print()
    return new ActionAsPdf("Index", _customers);
And when we run this application it looks like following.


Now when you click on Print it will create a PDF like following.


This was pretty basic demo but there are lots of options also available with Rotativa you can find that options in documentation on Github as well. I have shared same link above.
You can find source code of this sample application on github at following location -
Hope you like it. Stay tuned for more!!

My Interview on Geek.Fest - What's new in C# 6

I have been featured on Geek.Fest a you channel by Fanie Reynders. I have lots of fun while talking about latest C# features. We had interesting discussion and demo of latest c# features. Following is a video on the you tube.

You can find blog from Fanie at following location.

Following is the sample code and demo for the discussion.

Thank you very much Fanie Reynders and Geek.Fest for featuring me.

Support this blog-Buy me a coffee

Buy me a coffeeBuy me a coffee
Search This Blog
Subscribe to my blog


My Mvp Profile
Follow us on facebook
Blog Archive
Total Pageviews