linq-to-mongodb

linq to mongodb

Usage no npm install needed!

<script type="module">
  import linqToMongodb from 'https://cdn.skypack.dev/linq-to-mongodb';
</script>

README

# Linq-To-MongoDB

Linq To MongoDB.

Installation

$ npm install linq-to-mongodb -save
OR
$ npm install linq-to-mongodb -g

Features

  • This framework allows you to write the Linq queries on MongoDB documents.
  • It supports delayed execution, means query will get fired when any operation(e.g. ToArray,ForEach,First,Take,Skip etc) is performed on the linq query.
  • It converts the Linq/Sql query to MongoDB query, which helps to improve the code readability.

Example

Please check the below examples.

var linqToMongodb = require('linq-to-mongodb');
var connectionString ="mongodb://172.26.9.15:27017/DB_NAME"
var context = new linqToMongodb.DataContext(connectionString);
context.$.Name="amit";
context.GetTable("Users").Where(_user=>_user.UserName==Name).ToArray(users=>{
    //Here you will get all the users which has user name equals to 'amit'
})

Pass the name of documents to GetTable method of context. In above case name of document is "Users" ( Note : it is case sensitive). Please note the line number 4. if you forgot to add the line 4 i.e 'context.$.Name="amit";' then it wouldn't work. Here is hack every time when your using the variable in linq query we have to add the property to "context.quot; object. Take a look at another example.

function getUsers(age){
    var linqToMongodb = require('linq-to-mongodb');
    var connectionString ="mongodb://172.26.9.15:27017/DB_NAME"
    var context = new linqToMongodb.DataContext(connectionString);
    context.$.userAge=age;
    context.GetTable("Users").Where(_user=>_user.Age>userAge).ToArray(users=>{
        // Here you will get all the users which has age greater than 
        // the value of the parameter passed to function i.e value of age
    })
}

If you can see I have created the new property "userAge"( Note: this property name can be anything) to the object "context.quot; and assigned the value of parameter i.e "age" to the "userAge". Then I have used the same parameter name ("userAge") in the where clause "...Where(_user=>_user.Age>userAge)".

To Insert the records.

function addUser(_user){
    var linqToMongodb = require('linq-to-mongodb');
    var connectionString ="mongodb://172.26.9.15:27017/DB_NAME"
    var context = new linqToMongodb.DataContext(connectionString);
    context.GetTable("Users").Insert(_user,(result)=>{
        //result will provide the value of "_id" which is autogenerated.
    });
}

To Update the records.

function UpdateUser(user,callback){
    var context = new linqToMongodb.DataContext(connectionString);
    context.$.id=user._id;
    var $this = this;
    var obj={};
    obj['Designation']=user.Designation;
    obj['Project']=user.Project
    
    context.GetTable("Users").Where(a=>a._id==id).Update({ $set : obj },function(_obj){ 
        callback(_obj)
    });
}

Below are the supported Linq Queries.

  • Select e.g. context.GetTable("Users").Select(new {UserName:1,UserAge:1})
  • Where e.g. context.GetTable("Users").Where(_user=>_user.Age>userAge)
  • Count e.g. context.GetTable("Users").Where(_user=>_user.Age>userAge).Count(cnt=>{ });
  • Skip e.g. context.GetTable("Users").Where(_user=>_user.Age>userAge).Skip(10)
  • Take e.g. context.GetTable("Users").Where(_user=>_user.Age>userAge).Take(10)
  • Min e.g. context.GetTable("Users").Where(_user=>_user.Age>userAge).Min(user=>user.userAge);
  • Max e.g. context.GetTable("Users").Where(_user=>_user.Age>userAge).Max(user=>user.userAge);
  • Sum e.g. context.GetTable("Users").Where(_user=>_user.Age>userAge).Sum(user=>user.userAge);
  • Avg e.g. context.GetTable("Users").Where(_user=>_user.Age>userAge).Avg(user=>user.userAge);
  • OrderBy e.g. context.GetTable("Users").Where(_user=>_user.Age>userAge).OrderBy(user=>user.userAge);
  • OrderByDescending e.g. context.GetTable("Users").Where(_user=>_user.Age>userAge).OrderByDescending(user=>user.userAge);
  • GroupBy e.g. context.GetTable("Users").GroupBy(new {userAge:1})
  • Distinct e.g. context.GetTable("Users").Distinct(_user=>_user.Age>userAge)
  • First e.g. context.GetTable("Users").First(_user=>_user.Age>userAge,(user)=>{})
  • Last e.g. context.GetTable("Users").Last(_user=>_user.Age>userAge,(user)=>{})