71
1 Getting Started with MongoDB Capital District Java Developers Network January 16, 2014 Michael P. Redlich @mpredli about.me/mpredli/ 1 Friday, January 17, 14

Getting Started with MongoDB

Embed Size (px)

DESCRIPTION

This is a presentation on how to get started with the MongoDB database available at http://www.mongodb.org/.

Citation preview

Page 1: Getting Started with MongoDB

1

Getting Started with MongoDB

Capital District Java Developers NetworkJanuary 16, 2014

Michael P. Redlich@mpredli

about.me/mpredli/

1Friday, January 17, 14

Page 2: Getting Started with MongoDB

Who’s Mike?

• BS in CS from Rutgers University

• “Petrochemical Research Organization”

• Ai-Logix, Inc. (now AudioCodes)

• Amateur Computer Group of New Jersey

• Publications

• Presentations

2

2Friday, January 17, 14

Page 3: Getting Started with MongoDB

Upcoming Events

• Trenton Computer Festival

• March 14-15, 2014

• tcf-nj.org• Emerging Technologies for the Enterprise

• April 22-23, 2014

• phillyemergingtech.com

3

3Friday, January 17, 14

Page 4: Getting Started with MongoDB

4

Upcoming Events

4Friday, January 17, 14

Page 5: Getting Started with MongoDB

Objectives

• What is MongoDB?

• What is NoSQL?

• Getting Started with MongoDB

• Basic CRUD Operations

• Live Demos (yea!)

• MongoDB Resources

5

5Friday, January 17, 14

Page 6: Getting Started with MongoDB

What is MongoDB? (1)

• “...an open-source document database that provides high performance, high availability, and automatic scaling.”

MongoDB Web Site, http://www.mongodb.org/

• It’s name derived from “humongous”

• Written in C++

6

6Friday, January 17, 14

Page 7: Getting Started with MongoDB

What is MongoDB? (2)

• “...an open-source database used by companies of all sizes, across all industries and for a wide variety of applications. It is an agile database that allows schemas to change quickly as applications evolve, while still providing functionality developers expect from traditional databases...”

MongoDB Products Web Site, http://www.mongodb.com/products/mongodb/

7

7Friday, January 17, 14

Page 8: Getting Started with MongoDB

What is NoSQL?

• Developed to address shortcomings of a traditional SQL relational database, namely:

• big data

• frequency of access to big data

• performance and scalability

8

8Friday, January 17, 14

Page 9: Getting Started with MongoDB

How is MongoDB Used?

9

9Friday, January 17, 14

Page 10: Getting Started with MongoDB

Who is Using MongoDB?

10

10Friday, January 17, 14

Page 11: Getting Started with MongoDB

Features of MongoDB• Document-Oriented

Storage

• Full Index Support

• Replication and High Availability

• Auto-Sharding

• Querying

• Fast In-Place Updates

• Map/Reduce

• GridFS

• Professional Support by MongoDB

11

11Friday, January 17, 14

Page 12: Getting Started with MongoDB

Nomenclature (1)

12

RDBMS MongoDB

Database Database

Table Collection

Row Document

Index Index

Join Embedding & Linking

Foreign Key Reference

12Friday, January 17, 14

Page 13: Getting Started with MongoDB

Nomenclature (2)

13

13Friday, January 17, 14

Page 14: Getting Started with MongoDB

What is a Document?

• Basic unit of data

• analogous to a row in a RDBMS

• An ordered set of fields (keys) with associated values stored in BSON format

• similar to JSON

14

14Friday, January 17, 14

Page 15: Getting Started with MongoDB

What is BSON?

• “...a binary-encoded serialization of JSON-like documents.”

BSON Web Site, http://www.bsonspec.org/

• Binary JSON

• Designed to be lightweight, traversable, and efficient

15

15Friday, January 17, 14

Page 16: Getting Started with MongoDB

What is a Collection?

• A group of documents

• analogous to a table in a RDBMS

• Schema-less

16

16Friday, January 17, 14

Page 17: Getting Started with MongoDB

Advantages of Documents

• Documents correspond to native data types in many programming languages

• Embedded documents and arrays reduce the need for expensive joins

• Dynamic schema support fluent polymorphism

17

17Friday, January 17, 14

Page 18: Getting Started with MongoDB

Document Structure{

lastName : “Redlich”,

firstName : “Michael”,

email : “[email protected]

role : {

officer : “President”,

sig : “Java Users Group”

}

}

18

field value

embedded document

18Friday, January 17, 14

Page 19: Getting Started with MongoDB

Field Names

• Strings

• Cannot contain:

• null

• dots (.)

• dollar sign ($)

• No duplicate field names

19

19Friday, January 17, 14

Page 20: Getting Started with MongoDB

Conventions

• Command Prompt ($)

• MySQL prompt (mysql>)

• MongoDB prompt (>)

• Keywords (db, find(), etc.)

• Variables (variable)

20

20Friday, January 17, 14

Page 21: Getting Started with MongoDB

Example Database

• ACGNJ Board of Directors:

• lastName

• firstName

• roles (embedded documents)

• tenure

21

21Friday, January 17, 14

Page 22: Getting Started with MongoDB

Getting Started

• Download MongoDB

• Create a default data directory

•/data/db

•C:\data\db

• Create your first MongoDB database

22

22Friday, January 17, 14

Page 23: Getting Started with MongoDB

Starting MongoDB

• Start an instance of the MongoDB server:

$ mongod

• Start an instance of the MongoDB client (a JavaScript-based shell):

$ mongo

23

23Friday, January 17, 14

Page 24: Getting Started with MongoDB

Mongo Shell (1)

• Show the list of shell commands:

> help

• Show the list of databases:

> show dbs

• Show the current database:

> db

24

24Friday, January 17, 14

Page 25: Getting Started with MongoDB

Mongo Shell (2)

• Specify the database to use or create:

> use database

• Show the collections within the current database:

> show collections

• Show the users within the database:

> show users

25

25Friday, January 17, 14

Page 26: Getting Started with MongoDB

Mongo Shell (3)

• Show the recent system.profile entries:

> show profile

• Tab completion

• Command history

26

26Friday, January 17, 14

Page 27: Getting Started with MongoDB

Primary Key

• Denoted by a special field, _id

• It can be generated:

• Implicitly:

• {_id : ObjectID(value)}• Explicitly:

• {_id : 2 }, { _id : “MPR”}

27

27Friday, January 17, 14

Page 28: Getting Started with MongoDB

ObjectIDs

• Default type for _id

• A 12-byte hexadecimal BSON type:

28

28Friday, January 17, 14

Page 29: Getting Started with MongoDB

Live Demo!

29

29Friday, January 17, 14

Page 30: Getting Started with MongoDB

Create

30

30Friday, January 17, 14

Page 31: Getting Started with MongoDB

Create a Database

• Create a database in MySQL:

mysql> CREATE DATABASE database;

• Create a database in MongoDB:

> use database

31

31Friday, January 17, 14

Page 32: Getting Started with MongoDB

Create a Collection

• Create a new table in MySQL:

mysql> CREATE TABLE table(column datatype,...);

• Create a new collection in MongoDB:

> db.collection.insert({field:value,...})

32

32Friday, January 17, 14

Page 33: Getting Started with MongoDB

Insert Data

• Insert a row in MySQL:

> INSERT INTO table(column,...) VALUES(value,...);

• Insert a document in MongoDB:

> db.collection.insert({field:value,...})

33

33Friday, January 17, 14

Page 34: Getting Started with MongoDB

Insert Data with Loops

• Insert multiple documents with an array:

> for(int i = 0;i < j;++i) db.collection.insert({field:array[i]});

• Insert multiple documents with variable:

> for(int i = 0;i < j;++i) db.collection.insert({field:i})

34

34Friday, January 17, 14

Page 35: Getting Started with MongoDB

Live Demo!

35

35Friday, January 17, 14

Page 36: Getting Started with MongoDB

Read

36

36Friday, January 17, 14

Page 37: Getting Started with MongoDB

Query (1)

• Retrieve all rows in MySQL:

mysql> SELECT * FROM table;

• Retrieve all documents in MongoDB:

> db.collection.find()

37

37Friday, January 17, 14

Page 38: Getting Started with MongoDB

Query (2)

• Retrieve specified columns in MySQL:

mysql> SELECT column1,column2 FROM table;

• Retrieve specified fields in MongoDB:

> db.collection.find({},{field1:true,field2:true})

38

38Friday, January 17, 14

Page 39: Getting Started with MongoDB

Query (3)

• Retrieve specific rows in MySQL:

mysql> SELECT * FROM table WHERE column = value;

• Retrieve specific documents in MongoDB:

> db.collection.find({field:value})

39

39Friday, January 17, 14

Page 40: Getting Started with MongoDB

Query (4)

• Retrieve specific rows in MySQL:

mysql> SELECT * FROM table WHERE column = value ORDER BY value ASC;

• Retrieve specific documents in MongoDB:

> db.collection.find({field:value}).sort({field:1})

40

40Friday, January 17, 14

Page 41: Getting Started with MongoDB

Query (5)

• Query for multiple documents (returns a cursor):

> db.collection.find()

• Query for one document (returns a single document):

> db.collection.findOne()

41

41Friday, January 17, 14

Page 42: Getting Started with MongoDB

Query Selectors

• Scalar:

• $ne, $mod, $exists, $type, $lt, $lte, $gt, $gte

• Vector:

• $in, $nin, $all, $size

42

42Friday, January 17, 14

Page 43: Getting Started with MongoDB

Query (6)

• Retrieve specific rows in MySQL:

mysql> SELECT * FROM table WHERE column != value;

• Retrieve specific documents in MongoDB:

> db.collection.find({field:{$ne:value}})

43

43Friday, January 17, 14

Page 44: Getting Started with MongoDB

Query (7)

• Retrieve specific rows in MySQL:

mysql> SELECT * FROM table WHERE column1 = value OR column2 = value;

• Retrieve specific documents in MongoDB:

> db.collection.find({$or:[{field:value},{field:value}])

44

44Friday, January 17, 14

Page 45: Getting Started with MongoDB

Query (8)

> db.members.aggregate({$project:{officer:"$roles.officer"}})

> db.members.find({tenure: {$gt:ISODate("2014-12-31")}})

> db.members.find({"roles.officer": {$exists:true}}).sort({"roles.officer":1})

45

45Friday, January 17, 14

Page 46: Getting Started with MongoDB

Query (9)

> db.members.find({"roles.director":{$all:["Director"]}})

> db.members.find({"roles.committee":{$in:["Historian","Newsletter"]}})

> db.members.find({roles:{$size:3}})

46

46Friday, January 17, 14

Page 47: Getting Started with MongoDB

Live Demo!

47

47Friday, January 17, 14

Page 48: Getting Started with MongoDB

Update

48

48Friday, January 17, 14

Page 49: Getting Started with MongoDB

Update (1)

• Update a row in MySQL:

mysql> UPDATE table SET column = value WHERE id = id;

• Update a document in a MongoDB:

> db.collection.update({_id:value},{$set:{field:value}},{multi:true})

49

49Friday, January 17, 14

Page 50: Getting Started with MongoDB

Update (2)

• Update a row in MySQL:

mysql> UPDATE table SET column1 = value WHERE column2 > value;

• Update a document in MongoDB:

> db.collection.update({field1:{$gt:value}},{$set:{field2:value}},{multi:true})

50

50Friday, January 17, 14

Page 51: Getting Started with MongoDB

Update (3)

• Update a document using findOne():

> redlich = db.members.findOne({lastName: "Redlich"})

> redlich.roles = [{sig:"Java Users Group"}]

> db.members.update({lastName: "Redlich"},redlich)

51

51Friday, January 17, 14

Page 52: Getting Started with MongoDB

Atomic Update Operators

• Scalar:

• $inc, $set, $unset

• Vector:

• $push, $pop, $pull, $pushAll, $pullAll, $addToSet

52

52Friday, January 17, 14

Page 53: Getting Started with MongoDB

Update (4)

> db.members.update({lastName: "Redlich"},{$set:{"ISODate("2016-12-31")}})

> db.members.update({"roles.sig"},{$set:{"roles.sig":"JUG"}})

53

53Friday, January 17, 14

Page 54: Getting Started with MongoDB

Delete

54

54Friday, January 17, 14

Page 55: Getting Started with MongoDB

Delete (1)

• Delete all rows in MySQL:

mysql> DELETE FROM table;

• Delete all documents in MongoDB:

> db.collection.remove()

55

55Friday, January 17, 14

Page 56: Getting Started with MongoDB

Delete (2)

• Delete specific rows in MySQL:

mysql> DELETE FROM table WHERE column = value;

• Delete specific documents in MongoDB:

> db.collection.remove({field:value})

56

56Friday, January 17, 14

Page 57: Getting Started with MongoDB

Delete (2)

• Delete a MySQL database

mysql> DROP DATABASE database;

• Delete a MongoDB database

> use database

> db.dropDatabase()

57

57Friday, January 17, 14

Page 58: Getting Started with MongoDB

Backup/Restore

58

58Friday, January 17, 14

Page 59: Getting Started with MongoDB

Export (1)

• Export a collection to a JSON file

• Ensure mongod is running

$ mongoexport --db database --collection collection --out path/filename.json

59

59Friday, January 17, 14

Page 60: Getting Started with MongoDB

Export (2)

• Export a collection to a CSV file

• Ensure mongod is running

• A list of fields is required

$ mongoexport --db database --collection collection --fields field1,field2,... --csv --out path/filename.json

60

60Friday, January 17, 14

Page 61: Getting Started with MongoDB

Import

• Import a collection from a JSON, CSV, or TSV file

• Ensure mongod is running

$ mongoimport --db database --collection collection < path/filename.json

61

61Friday, January 17, 14

Page 62: Getting Started with MongoDB

Dump

• Dump a specified MySQL database:

$ mysqldump -u root --opt database > path.filename.sql

• Dump all MongoDB databases:

• Ensure mongod is not running

$ mongodump --dbpath /data/db --out path

62

62Friday, January 17, 14

Page 63: Getting Started with MongoDB

Live Demo!

63

63Friday, January 17, 14

Page 64: Getting Started with MongoDB

Package Components (1)

• Core Processes

• mongod - core DB process

• mongos - controller & query router (sharding)

• mongo - interactive JavaScript-based shell

64

64Friday, January 17, 14

Page 65: Getting Started with MongoDB

Package Components (2)

• Binary Import and Export

• mongodump - creates BSON dump files

• mongorestore - restores BSON dump files

• bsondump - converts BSON to JSON

• mongooplog - streams oplog entries

65

65Friday, January 17, 14

Page 66: Getting Started with MongoDB

Package Components (3)

• Data Import and Export

• mongoimport - imports JSON, CSV, or TSV data formats

• mongoexport - exports to JSON, CSV, or TSV data formats

66

66Friday, January 17, 14

Page 67: Getting Started with MongoDB

Package Components (4)

• Diagnostic Tools

• mongostat - captures database operations by type (insert, query, etc.)

• mongotop - tracks read/write activity

• mongosniff - provides tracing/sniffing view into database activity

• mongoperf - performance testing tool

67

67Friday, January 17, 14

Page 68: Getting Started with MongoDB

Package Components (5)

• GridFS

• mongofiles - provides a command-line interaction to a GridFS storage system

68

68Friday, January 17, 14

Page 69: Getting Started with MongoDB

MongoDB Resources (1)

69

69Friday, January 17, 14

Page 70: Getting Started with MongoDB

70

MongoDB Resources (2)

• mongodb.org

• docs.mongodb.org

• mongodb.org/books

• mongodb.com/products/mongodb

• mongodb.com/reference

• bsonspec.org

• education.mongodb.com

70Friday, January 17, 14

Page 71: Getting Started with MongoDB

71

Thanks!

[email protected]

@mpredli

javasig.org

71Friday, January 17, 14