MongoDB For C++ Developers

Post on 01-Nov-2014

7.853 views 2 download

Tags:

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 of MongoDB For C++ Developers

MongoDB For C++ Developers{ author: “Ynon Perek” }

Saturday, February 2, 13

Whoami

Ynon Perek

http://ynonperek.com

ynon@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

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

Thanks For Listening

Ynon Perek

Slides at:ynonperek.com

Talk to me at: ynon@ynonperek.com

Saturday, February 2, 13