mongodb for c++ developers
DESCRIPTION
A short introduction slide deck about the main classes used to connect between C++ and MongoDB. Includes code snippets and full example programs.TRANSCRIPT
MongoDB For C++ Developers{ author: “Ynon Perek” }
Saturday, February 2, 13
Whoami
Ynon Perek
http://ynonperek.com
Saturday, February 2, 13
Agenda
Mongo Is Awesome
CRUD Operations
The Driver
Coding Time
Saturday, February 2, 13
Mongo Is Awesome
Data Store for JSON Objects
Saturday, February 2, 13
Mongo Is Awesome
Data Store for JSON Objects
{ “Name” : “Rose Tyler” }
Saturday, February 2, 13
JSON Objects
A JSON Object is a collection of key/value pairs
Keys are simple strings
Values can be: Numbers, Strings, Arrays, Other Objects, and more
{ "name" : "Rose Tyler", "race" : "Human", "body parts" : [ "head", "legs"]}
Saturday, February 2, 13
It’s A Document Oriented Data Store
Saturday, February 2, 13
It don’t do joins
Saturday, February 2, 13
It don’t do transactions
Saturday, February 2, 13
Keeping It Simple
Document Oriented
No Transactions
No Joins
Saturday, February 2, 13
Application Architecture
DBAPP
Saturday, February 2, 13
Application Architecture
DBAPP
DB
DB
Saturday, February 2, 13
What Can Mongo Do For You
Create and store objects
Arrange them in collections
Retrieve them later
Saturday, February 2, 13
Q & A
Saturday, February 2, 13
CRUD OperationsCreate, Read, Update and Destroy Data
Saturday, February 2, 13
Mongo CRUD
Create is called insert
Read is called find
Update is called update
Destroy is called remove
Saturday, February 2, 13
Mongo CRUD
From a developer’s perspective, MongoDB operations are the same through the driver and through the console
In both cases, operations look like function calls or method invocations
We’ll use mongo shell for the rest of this chapter
Saturday, February 2, 13
Inserting Data
Use the command insert or save to insert a new object
db.collection.insert( obj );
db.collection.insert( array );
Saturday, February 2, 13
Inserting Data
Inserting to a new collection creates the collection
Inserting an object with an _id key, it is used as the object’s id (and must be unique).
Saturday, February 2, 13
Demo: Insert
Saturday, February 2, 13
find and findOne perform read operations
Both take a query
find returns a cursor
findOne returns an object
db.collection.find( <query>, <projection> )
Reading Data
Optional: Fields to fetch
Saturday, February 2, 13
Query Document
An empty (or missing) query document returns everything
db.collection.find({})
db.collection.find()
Saturday, February 2, 13
Query Document
Each key/value pair in the query document imposes a condition on the results (objects that match).
db.movies.find({ “genre” : “indie” });
db.books.find({“pages” : { “$gt” : 100 }});
Saturday, February 2, 13
Query Document
Each key/value pair in the query document imposes a condition on the results (objects that match).
db.movies.find({ “genre” : “indie” });
db.books.find({“pages” : { “$gt” : 100 }});
Query Object
Saturday, February 2, 13
Query Document
A compound query means a logical AND on the conditions.
db.inventory.find( { “type” : “snacks”, “available” : { “$lt” : 10 } });
Saturday, February 2, 13
Quiz: What Is Returned
{ “publisher” : “DC”}
from alterego publisher
Earth Bruce Wayne DC
Earth Peter Parker Marvel
Krypton Clark Kent DC
Saturday, February 2, 13
Quiz: What Is Returned
{ “publisher” : “DC”, “from” : “Earth”}
from alterego publisher
Earth Bruce Wayne DC
Earth Peter Parker Marvel
Krypton Clark Kent DC
Saturday, February 2, 13
Resources
Queries Cheat Sheethttp://www.10gen.com/sites/default/files/downloads/mongodb_qrc_queries.pdf
Saturday, February 2, 13
Demo: Query
Saturday, February 2, 13
Update
Update operations modify existing data in the DB
Mongo supports two update commands: update() and save()
Update is the more general (and complex)
Saturday, February 2, 13
Update
The general form for update is:
db.collection.update( <query>, <update>, <options> )
Which Entries to update
What to do with them
Saturday, February 2, 13
Update
The second argument to update() is an operator object
It tells update what to do with the data
Some keys you can use: “$set”, “$inc” “$push”, “$pushAll”, “$addToSet”, “$pop”, “$pull”, “$pullAll”
Saturday, February 2, 13
Update: set
$set modifies a value or add a new value
Example:
db.posts.update( { title: “Why Is Your Cat Unhappy” }, { $set : { “archived” : true } });
Saturday, February 2, 13
Quiz: $set
What happens here ?
db.cats.update( { color: “white” }, { “$set” : { “owners” : [“John”, “Jim”] } });
Saturday, February 2, 13
Quiz: $set
Update owners array of the first cat with white color
If you want to update all objects, use multi
db.cats.update( { color: “white” }, { “$set” : { “owners” : [“John”, “Jim”] } } { multi : true });
Saturday, February 2, 13
Deleting Data
remove() deletes objects from a collection
Takes a query and possibly a <justOne> arguments
Examples:
db.posts.remove({ “author” : “Father Angelo” })
db.music.remove({ “genres” : “pop” })
db.posts.remove({ “tags” : “funny” }, 1 );
Saturday, February 2, 13
Q & A
Saturday, February 2, 13
The Driver
Hello C++ Mongo
C++ Objects
Coding Time
Saturday, February 2, 13
Hello Mongo
#include <iostream>#include "client/dbclient.h"
using namespace mongo;
int main() { try { DBClientConnection c; c.connect("localhost");
cout << "connected ok" << endl; } catch( DBException &e ) { cout << "caught " << e.what() << endl; } return 0;}
Saturday, February 2, 13
Insert Data
BSONObjBuilder b;b.append("name", "John");b.append("age", 19); BSONObj p1 = b.obj();c.insert("test.people", p1);
Saturday, February 2, 13
Query Data
void printIfAge(DBClientConnection&c, int age) { auto_ptr<DBClientCursor> cursor = c.query("tutorial.persons", QUERY( "age" << age ) );
while( cursor->more() ) { BSONObj p = cursor->next(); cout << p.getStringField("name") << endl; }}
Saturday, February 2, 13
Update Data
db.update( "tutorial.persons" , BSON( "name" << "Joe" << "age" << 33 ), BSON( "$inc" << BSON( "visits" << 1 ) ) );
Saturday, February 2, 13
Delete Data
db.remove("tutorial.persons", QUERY("age" << 19));
Saturday, February 2, 13
C++ Objects
DBClientConnection represents a connection
Methods:
connect, auth
insert, query, update, remove
DBClientConnection c;c.connect("localhost");
Saturday, February 2, 13
C++ Objects
Querydata object represents a query
Methods:
sort
Create with macro QUERY
QUERY( "age" << 33 << "school" << "UCLA" ). sort("name");
QUERY( "age" << GT << 30 << LT << 50 )
Saturday, February 2, 13
C++ Objects
DBClientCursorReturned from query()
Methods:
more()
next()
Create with auto_ptr
auto_ptr<DBClientCursor> cursor = c.query("tutorial.persons", BSONObj());
while( cursor->more() ) cout << cursor->next().toString();
Saturday, February 2, 13
Coding Time
Mongo Score Board:https://github.com/ynonp/mongo-score
MoChat:https://github.com/ynonp/mochat
Saturday, February 2, 13
Thanks For Listening
Ynon Perek
Slides at:ynonperek.com
Talk to me at: [email protected]
Saturday, February 2, 13