#Mongo-dart - MongoDB driver for Dart programming language.

Build Status Coverage Status

Server-side driver library for MongoDb implemented in pure Dart.

##Basic usage

###Obtaining connection

  Db db = new Db("mongodb://localhost:27017/mongo_dart-blog");
  await db.open();


Method find returns stream of maps and accept query parameters, usually build by fluent API query builder provided by mongo_dart_query as top level getter where

  var collection = db.collection('user');
  await collection.find(where.lt("age", 18)).toList();
  await coll
      .find(where.gt("my_field", 995).sortBy('my_field'))
      .forEach((v) => print(v));
  await coll.find(where.sortBy('itemId').skip(300).limit(25)).toList();

Method findOne take the same parameter and returns Future of just one map (mongo document)

  val = await coll.findOne(where.eq("my_field", 17).fields(['str_field','my_field']));

Take notice in these samples that unlike mongo shell such parameters as projection (fields), limit and skip are passed as part of regular query through query builder

###Inserting documents

  await usersCollection.insertAll([
    {'login': 'jdoe', 'name': 'John Doe', 'email': '[email protected]'},
    {'login': 'lsmith', 'name': 'Lucy Smith', 'email': '[email protected]'}

###Updating documents

You can update whole document with method save

  var v1 = await coll.findOne({"name": "c"});
  v1["value"] = 31;
  await coll.save(v1);

or you can perform field level updates with method update and top level getter modify for ModifierBuilder fluent API

  coll.update(where.eq('name', 'Daniel Robinson'), modify.set('age', 31));

###Removing documents

  /// or, to remove all documents from collection

Simple app on base of JSON ZIPS dataset

import 'package:mongo_dart/mongo_dart.dart';

main() async {
  void displayZip(Map zip) {
        'state: ${zip["state"]}, city: ${zip["city"]}, zip: ${zip["id"]}, population: ${zip["pop"]}');
  Db db =
      new Db("mongodb://reader:[email protected]:37468/samlple");
  var zips = db.collection('zip');
  await db.open();
******************** Zips for state NY, with population between 14000 and 16000,
******************** reverse ordered by population''');
  await zips
          .eq('state', 'NY')
          .inRange('pop', 14000, 16000)
          .sortBy('pop', descending: true))
  print('\n******************** Find ZIP for code 78829 (BATESVILLE)');
  var batesville = await zips.findOne(where.eq('id', '78829'));
  print('******************** Find 10 ZIP closest to BATESVILLE');
  await zips
      .find(where.near('loc', batesville["loc"]).limit(10))
  print('closing db');
  await db.close();

###See also:



Server-side driver library for MongoDb implemented in pure Dart. As most of IO in Dart, mongo_dart is totally async -using Futures and Streams. .