node package manager

mingo

Mingo

JavaScript implementation of MongoDB query language

Mingo harnesses the power of MongoDB-style queries and allows direct querying of in-memory javascript objects in both client and server-side environments. This library is self-contained and has zero-dependencies

version build status

Installing

$ npm install mingo

In browser

<script type="text/javascript" src="./dist/mingo.min.js"></script>

Features

For documentation on using query operators see mongodb

Usage

 
var Mingo = require('mingo');
// or just access *Mingo* global in browser 
 
// setup the key field for your collection 
Mingo.setup({
    key: '_id' // default 
});
 
// create a query with criteria 
// find all grades for homework with score >= 50 
var query = new Mingo.Query({
    type: "homework",
    score: { $gte: 50 }
});

Searching and Filtering

// `collection` is an Array of objects you want to query 
 
// filter collection with find() 
var cursor = query.find(collection);
 
// shorthand with query criteria 
// cursor = Mingo.find(collection, criteria); 
 
// sort, skip and limit by chaining 
cursor.sort({student_id: 1, score: -1})
    .skip(100)
    .limit(100);
 
// count matches 
cursor.count();
 
// iterate cursor 
// iteration is forward only 
while (cursor.hasNext()) {
    console.log(cursor.next());
}
 
// use first(), last() and all() to retrieve matched objects 
cursor.first();
cursor.last();
cursor.all();
 
// Filter non-matched objects ( 
var result = query.remove(collection);

Aggregation Pipeline

var agg = new Mingo.Aggregator([
    {'$match': { "type": "homework"}},
    {'$group':{'_id':'$student_id', 'score':{$min:'$score'}}},
    {'$sort':{'_id': 1, 'score': 1}}
]);
 
var result = agg.run(collection);
 
// shorthand 
result = Mingo.aggregate(
    collection,
    [
        {'$match': { "type": "homework"}},
        {'$group':{'_id':'$student_id', 'score':{$min:'$score'}}},
        {'$sort':{'_id': 1, 'score': 1}}
    ]
);

Integration with custom collection

// using Backbone.Collection as an example (any user-defined object will do) 
var Grades = Backbone.Collection.extend(Mingo.CollectionMixin);
 
// `collection` is an array of objects 
var grades = new Grades(collection);
 
// find students with grades less than 50 in homework or quiz 
// sort by score ascending and type descending 
cursor = grades.query({
    $or: [{type: "quiz", score: {$lt: 50}}, {type: "homework", score: {$lt: 50}}]
}).sort({score: 1, type: -1}).limit(10);
 
// return grade with the lowest score 
cursor.first();

The collection to mixin needs to provide a method with signature toJSON() -> Array[Object].

Documentation

Contributing

License

MIT