Server-side driver library for MongoDb implemented in pure Dart.
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 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
await usersCollection.insertAll([
{'login': 'jdoe', 'name': 'John Doe', 'email': 'john@doe.com'},
{'login': 'lsmith', 'name': 'Lucy Smith', 'email': 'lucy@smith.com'}
]);
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));
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();
}
-
For more structured approach to communication with MongoDB: Objectory
-
Checkout redstone_mapper_mongo for easy transformations between Mongo Dart Maps <==> Objects <==> JSON Strings, and integrations with the redstone server framework.