Mongo-dart - MongoDB driver for Dart programming language.
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();
Querying
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 coll = db.collection('user');
await coll.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': 'john@doe.com'},
{'login': 'lsmith', 'name': 'Lucy Smith', 'email': 'lucy@smith.com'}
]);
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
students.remove(where.id(id));
/// or, to remove all documents from collection
students.remove();
Simple app on base of [JSON ZIPS dataset] (http://media.mongodb.org/zips.json)
import 'package:mongo_dart/mongo_dart.dart';
main() async {
void displayZip(Map zip) {
print(
'state: ${zip["state"]}, city: ${zip["city"]}, zip: ${zip["id"]}, population: ${zip["pop"]}');
}
Db db =
new Db("mongodb://reader:vHm459fU@ds037468.mongolab.com:37468/samlple");
var zips = db.collection('zip');
await db.open();
print('''
******************** Zips for state NY, with population between 14000 and 16000,
******************** reverse ordered by population''');
await zips
.find(where
.eq('state', 'NY')
.inRange('pop', 14000, 16000)
.sortBy('pop', descending: true))
.forEach(displayZip);
print('\n******************** Find ZIP for code 78829 (BATESVILLE)');
var batesville = await zips.findOne(where.eq('id', '78829'));
displayZip(batesville);
print('******************** Find 10 ZIP closest to BATESVILLE');
await zips
.find(where.near('loc', batesville["loc"]).limit(10))
.forEach(displayZip);
print('closing db');
await db.close();
}