Jongo mongo sv
description
Transcript of Jongo mongo sv
Mongo + Java = JongoMongo and Java made easy !
by @karesti - MongoSV 2012
mardi 4 décembre 12
Agile DeveloperMongoDB User
MongoDB Master@karesti
Katia Aresti
mardi 4 décembre 12
Back on 2010 ...
mardi 4 décembre 12
{mongo : "awesome"}mardi 4 décembre 12
{DBObject : "not bad, not awesome"}
REST Web ServicesSearch of
POI-s
DBObject API
mardi 4 décembre 12
Morphia ?
Back on 2010 ...
mardi 4 décembre 12
MorphiaJPA-LIKE
mardi 4 décembre 12
So ...• Morphia is great, good work !
• But : Need to learn another API => Mongo, Java Driver, Morphia
• But : JPA Like -> Mongo Paradigm is not JPA / Hibernate
• Morphia is comming to Java Driver ?
• Final choice :
• Morphia for the Java - DBObject Mapping
mardi 4 décembre 12
Late 2011 ...
mardi 4 décembre 12
Jongo
• What’s Jongo ?
• ODM on top of the Java Driver
• Jackson and BSON4Jackson for (Un)marshalling
• No JPA / Hibernate style
• Query in Java as in Mongo Shell
@bguerout
@amsellemyves
mardi 4 décembre 12
DBCursor results = collection.find(query);
List<User> users = new ArrayList<User>(); for (DBObject result : results) {
User user = new User(); user.setUsername((String) result.get("username")); user.setAge((Integer) result.get("age")); users.add(user);}
DBCollection users = db.getCollection("users");
DBObject firstQuery = QueryBuilder.start("age").greaterThan(20).lessThan(30).get();
DBObject secondQuery = QueryBuilder.start("age").greaterThan(50).lessThan(60).get();
DBObject query = QueryBuilder.start().or(firstQuery,secondQuery).get();
db.users.find({ $or : [ { age : {$gt:20,$lt:30} } , { age : {$gt:50,$lt:60} } ] })
Java Driver :
DB db = mongo.getDB("users");
mardi 4 décembre 12
Iterable<User> users = collection.find("{ $or : [ { age : {$gt:20,$lt:30} } , { age : {$gt:50,$lt:60} } ] }").as(User.class);
db.users.find({ $or : [ { age : {$gt:20,$lt:30} } , { age : {$gt:50,$lt:60} } ] })
Jongo find
MongoCollection collection = new Jongo(db).getCollection("users");
mardi 4 décembre 12
DBCursor results = collection.find(query);
List<User> users = new ArrayList<User>(); for (DBObject result : results) {
User user = new User(); user.setUsername((String) result.get("username")); user.setAge((Integer) result.get("age")); users.add(user);}
DBCollection collection = db.getCollection("users");
DBObject firstQuery = QueryBuilder.start("age").greaterThan(20).lessThan(30).get();
DBObject secondQuery = QueryBuilder.start("age").greaterThan(50).lessThan(60).get();
DBObject query = QueryBuilder.start().or(firstQuery,secondQuery).get();
DB db = mongo.getDB("users");
Iterable<User> users = collection.find("{ $or : [ { age : {$gt:20,$lt:30} } , { age : {$gt:50,$lt:60} } ] }").as(User.class);
MongoCollection collection = new Jongo(db).getCollection("users");
mardi 4 décembre 12
users.update("{name: 'Joe'}").upsert().multi().with("{$inc: {age: 1}}");
db.users.update({ name : 'Joe' } , { {$inc : {age : 1} }, true, true)
MongoCollection users = new Jongo(db).getCollection("users");
Jongo update
mardi 4 décembre 12
Templating
MongoCollection collection = new Jongo(db).getCollection("users");
friends.find("{name: #, age: #}", "John", 18);
{name: 'John', age: 18}
mardi 4 décembre 12
Aggregation Fw
MongoCollection collection = new Jongo(db).getCollection("emails");
collection.aggregate("{$project:{sender:1}}") .and("{$match:{tags:'read'}}") .and("{$limit:10}") .as(Email.class);
mardi 4 décembre 12
Custom Mapper
MongoCollection collection = new Jongo(db).getCollection("users");
Iterable<Integer> ages = col.find("{'name':'John'}").map( new ResultMapper<Integer>() { @Override public Integer map(DBObject result) { return result.get("age"); } });
mardi 4 décembre 12
Conclusion
• Mongo Shell is pleasure, Java+Mongo can be a pleasure too
• I would love Java Driver API was similar to Jongo !
mardi 4 décembre 12
@bguerout - Benoit Guérout
@amsellemyves - Yves Amsellem
@karesti - Katia Aresti
https://github.com/bguerout/jongo
http://jongo.org/
mardi 4 décembre 12
Thank you for listening !!!
mardi 4 décembre 12