SlideShare a Scribd company logo
1 2 APR IL , 2018
# M D B l o c a l
How to leverage
what’s new in MongoDB
3.6
# M D B l o c a l
Maxime Beugnet
Developer Advocate EMEA @MongoDB Paris
Twitter : @MBeugnet
Github : MaBeuLux88
Email : maxime@mongodb.com
Meetups
Hackathons
Workshops
Conferences
# M D B l o c a l
MONGODB 3.6
THEMES
# M D B l o c a l
To make your life easier…
# M D B l o c a l# M D B l o c a l
Realtime
Expressibili
ty Analytics Application
Availability
Operations
# M D B l o c a l
REALTIME
CHANGE STREAMS
# M D B l o c a l# M D B l o c a l
updatereplaceinsertdeleteMongoDB Application Action
# M D B l o c a l# M D B l o c a l
db.coll.watch()
db.coll.watch([{$match: {operationType: “insert”}}])
db.coll.watch([], {fullDocument:“updateLookup”})
db.coll.watch([], {resumeAfter:<cachedResumeToken>})
Change streams
• $match
• $project
• $addFields
• $replaceRoot
• $redact
# M D B l o c a l# M D B l o c a l
cursor = db.users.watch([ ], {"fullDocument":"updateLookup"});
while ( !cursor.isExhausted() ) {
if ( cursor.hasNext() ) {
print(tojson(cursor.next()));
}
}
Change streams => cursors
# M D B l o c a l# M D B l o c a l
•Resumable
•Targeted
Changes
•Total ordering
•Durability
•Security
•Ease of use
•Idempotence
Characteristics of Change Streams
# M D B l o c a l
EXPRESSIBILITY
More expressive query language
Array updates
# M D B l o c a l# M D B l o c a l
db.products.find( {
$expr: {
$gt: [ "$currRating" , "$prevRating" ]
}
} )
Comparing Fields within a document
# M D B l o c a l# M D B l o c a l
db.products.find( {
$expr: {
$gt: [ {$subtract:
["$currRating" ,"$prevRating"] }, 2]
}
} )
Comparing Fields within a document
# M D B l o c a l# M D B l o c a l
Comparing Fields within a document
db.supplies.find( {
$expr: {
$lt:[ {
$cond: {
if: { $gte: ["$qty", 100] },
then: { $divide: ["$price", 2] },
else: { $divide: ["$price", 4] }
}
}, 5 ]
}
})
# M D B l o c a l# M D B l o c a l
Expressive Array updates
Update all matching
items in an array
Match Nested Arrays
# M D B l o c a l# M D B l o c a l
Expressive Array updates
MongoDB V3.4
• $
• $addToSet
• $pop
• $pull
• $push
• $pullAll
{ _id: 1,
grades: [
{ exam: 80, quizz: 75},
{ exam: 85, quizz: 90}
]
}
db.students.update(
{ _id: 1, "grades.exam": 85 },
{ $set: { "grades.$.quizz" : 95 } }
)
# M D B l o c a l# M D B l o c a l
Expressive Array updates
MongoDB V3.6
• $[<id>]
• $[]
{ _id: 1,
grades: [
{ exam: 80, quizz: 75},
{ exam: 85, quizz: 90}
]
}
db.students.update( { },
{ $set: { "grades.$[elem].quizz" : 100 } },
{ multi: true, arrayFilters: [ { "elem.exam": { $gte: 80 } } ] }
)
db.students.update( { },
{ $set: { "grades.$[].quizz" : 100 } },
{ multi: true }
)
# M D B l o c a l# M D B l o c a l
Expressive Array updates
{ _id: 1, name: "X",
Medications: [
{ id: 23, name: "DrugName99", Sched:"I", Rx: [
{ id:13, Qty: 60, started: "2009-01-01" },
{ id:77, Qty: 30, started: "2011-02-01", current:true }
]},
{ id: 41, name: "OtherDrugName", Sched: "II, Rx: […] },
{ id: 59, name: "ThirdDrug", Sched:"I", Rx:[
{ id:994, Qty: 60, started: "2012-01-01", current:true },
{ id:1034, Qty: 90, started: "2007-02-01" }
]},
"lastVisit": ISODate("2017-01-22T13:01:13.000Z")
}
# M D B l o c a l# M D B l o c a l
Expressive Array updates
{ _id: 1, name: "X",
Medications: [
{ id: 23, Sched:"I", Rx: [
{ id:13, Qty: 60},
{ id:77, Qty: 30, current:true}
]},
{ id: 41, Sched: "II" },
{ id: 59, Sched:"I", Rx:[
{ id:994, Qty: 60, current:true},
{ id:1034, Qty: 90}
]}
]
}
db.patientRx.update(
{},
{"$set": {"Medications.$[med].Rx.$[rx].Qty": 20}},
{ "multi": true,
"arrayFilters": [
{"med.Sched": "I"},
{"rx.current":true, "rx.Qty":{$gt:30}}
]}
)
# M D B l o c a l# M D B l o c a l
Expressive Array updates
{ _id: 1, name: "X",
Medications: [
{ id: 23, Sched:"I", Rx: [
{ id:13, Qty: 60},
{ id:77, Qty: 30, current:true}
]},
{ id: 41, Sched: "II" },
{ id: 59, Sched:"I", Rx:[
{ id:994, Qty: 60, current:true},
{ id:1034, Qty: 90}
]}
}
db.patientRx.update(
{"Medications": {"$elemMatch": {
"Sched": "II",
"Rx": {"$elemMatch": {
"current": true,
"Qty": {"$gt": 30}
}}
}}},
{"$set": {"Medications.$[med].Rx.$[rx].Qty": 20}},
{ "multi": true,
"arrayFilters": [
{"med.Sched": "I"},
{"rx.current":true, "rx.Qty":{$gt:30}}
]}
)
# M D B l o c a l
ANALYTICS
New operators
Timezone support
Expressive $lookup
R Driver
BI Connector
# M D B l o c a l# M D B l o c a l
New operators
# M D B l o c a l# M D B l o c a l
New operators : $arrayToObject
{ "_id" : 1, dimensions: [ { "k": "l", "v": 25} , { "k": "w", "v": 10 }, { "k": "uom", "v": "cm" } ] }
{ "_id" : 2, dimensions: [ [ "l", 50 ], [ "w", 25 ], [ "uom", "cm" ] ] }
{ "_id" : 3, dimensions: [ [ "l", 50 ], [ "l", 25 ], [ "l", "cm" ] ] }
db.inventory.aggregate( [ { $project: { dimensions: { $arrayToObject: "$dimensions" } } } ] )
{ "_id" : 1, "dimensions" : { "l" : 25, "w" : 10, "uom" : "cm" } }
{ "_id" : 2, "dimensions" : { "l" : 50, "w" : 25, "uom" : "cm" } }
{ "_id" : 3, "dimensions" : { "l" : 50 } }
# M D B l o c a l# M D B l o c a l
New operators : $objectToArray
{ $objectToArray: { item: "foo",
qty: 25,
size: { len: 25, w: 10, uom: "cm" }
} }
[ { "k" : "item", "v" : "foo" },
{ "k" : "qty", "v" : 25 },
{ "k" : "size", "v" : { "len" : 25, "w" : 10, "uom" : "cm" } } ]
# M D B l o c a l# M D B l o c a l
New operators : $mergeObjects
{ $mergeObjects: [ { a: 1 },
{ a: 2, b: 2 },
{ a: 3, b: null, c: 3 } ] }
{ a: 3, b: null, c: 3 }
# M D B l o c a l# M D B l o c a l
New operators : $dateFromString
{ _id: 1, date: "2017-02-08T12:10:40.787, timezone: "America/New_York" },
{ _id: 2, date: "2017-02-08" , timezone: "-05:00" },
{ _id: 3 }
db.logmessages.aggregate( [
{ $project: {
date: {
$dateFromString: { dateString: '$date', timezone: '$timezone’ }
}
}
} ] )
{ "_id" : 1, "date" : ISODate("2017-02-08T17:10:40.787Z") }
{ "_id" : 2, "date" : ISODate("2017-02-08T05:00:00Z") }
{ "_id" : 3, "date" : null }
# M D B l o c a l# M D B l o c a l
New operators : $dateFromParts
db.sales.aggregate([ {
$project: {
date: { $dateFromParts: { 'year' : 2017, 'month' : 2, 'day': 8, 'hour' : 12 } },
date_iso: { $dateFromParts: { 'isoWeekYear' : 2017, 'isoWeek' : 6, 'isoDayOfWeek' : 3, 'hour' : 12 } },
date_timezone: { $dateFromParts: { 'year' : 2016, 'month' : 12, 'day' : 31, 'hour' : 23, 'minute' : 46,
'second' : 12, 'timezone' : 'America/New_York’ } }
}
}])
{
"_id" : 1,
"date" : ISODate("2017-02-08T12:00:00Z"),
"date_iso" : ISODate("2017-02-08T12:00:00Z"),
"date_timezone" : ISODate("2017-01-01T04:46:12Z")
}
# M D B l o c a l# M D B l o c a l
New operators : $dateToParts
db.sales.aggregate([ {
$project: {
date: { $dateToParts: { date: "$date" } },
date_iso: { $dateToParts: { date: "$date", iso8601: true } },
date_timezone: { $dateToParts: { date: "$date", timezone: "America/New_York" } }
}
}])
{
"_id" : 2,
"date" : { "year" : 2017, "month" : 1, "day" : 1, "hour" : 1,
"minute" : 29, "second" : 9, "millisecond" : 123 },
"date_iso" : { "isoWeekYear" : 2016, "isoWeek" : 52, "isoDayOfWeek" : 7, "hour" : 1,
"minute" : 29, "second" : 9, "millisecond" : 123 },
"date_timezone" : { "year" : 2016, "month" : 12, "day" : 31, "hour" : 20,
"minute" : 29, "second" : 9, "millisecond" : 123 }
}
# M D B l o c a l# M D B l o c a l
Timezone support
$dayOfYear, $dayOfMonth, $dayOfWeek, $year, $month, $week, $hour,
$minute, $second, $millisecond, $isoDayOfWeek, $isoWeek, $isoWeekYear
{ $operator: { date: <isoDateExpression>, timezone: <tzExpression> } }
# M D B l o c a l# M D B l o c a l
>db.collection.aggregate({$lookup:{
from:"coll2",
localField:"x",
foreignField:"y",
as:"coll2details"
}}])
More expressive $lookup
>db.collection.aggregate({$lookup:{
from:"coll2",
let: {x: "$x"},
pipeline: [
{$match: {$expr:
{$eq: [ "$y", "$$x"] }
} }
]
as:"coll2details"
}}])
Prior to 3.6 New in 3.6
# M D B l o c a l# M D B l o c a l
$lookup example
orders:
{
line_items : [
{ id: 123,
title : “USB Battery”,
price: 15.0 },
{ id: 512,
title : “Hip T-shirt”,
price : 45.0 }
]
}
db.orders.aggregate([
{$unwind: "$line_items"},
{$lookup:{
from: "reviews",
let: {p_id: "$line_items.id"},
pipeline: [
{$match: {$expr: {$eq: ["$p_id","$$p_id"]}}},
{$group: { _id: 1, rating: {$avg:"$rating"}}}
], as: "avgRating" }
}
])
# M D B l o c a l# M D B l o c a l
Recommended MongoDB R driver for data scientists, developers & statisticians
• MongoDB read & write concerns to control data consistency & durability
• Idiomatic, native language access to the database
• Data security with enterprise authentication mechanisms
• BSON data type support, e.g., Decimal 128 for high precision scientific &
financial analysis
R Driver for MongoDB
# M D B l o c a l# M D B l o c a l
MongoDB Connector for BI
+ many more
# M D B l o c a l# M D B l o c a l
MongoDB Connector for BI
• Faster
• Takes advantage of 3.6 expressive Lookup to push more
computation into the database
• Supports Show Status function to enable deeper performance
optimization
• Simpler
• Lifecycle management with Ops Manager
• Schema sampling and mapping now managed by the mongosqld
process, rather than separate utility (mongodrdl)
• Authenticate via client-side plugins, rather than managing TLS
certificates. Kerberos support added
# M D B l o c a l
APPLICATIONS AVAILABILITY
Retryable writes
DNS seed list
Read Concern: Available & Tunable
consistency
# M D B l o c a l# M D B l o c a l
Retryable writes
PS
S
Application P
write successful :D
write unsuccessful :O
# M D B l o c a l# M D B l o c a l
Retryable writes
Application MongoDB
{ _id: 1,
team : "Manchester United",
gameID: "game123",
coach : "José Mourinho",
score : 2,
league: "Premier League"
}
{ _id: 2,
team : "Chelsea",
gameID: "game456",
coach : "Antonio Conte",
score : 2,
league: "Premier League"
}
db.games.update(
{gameID:"game123"},
{$inc: {score:1}}
)
db.games.update(
{team: "Chelsea"},
{$set: {coach:"Zidane"}}
)
# M D B l o c a l# M D B l o c a l
• Automatic Drivers logic
• Network errors
• Elections
• NOT for logic errors
• Safe
• For both non-idempotent and idempotent writes
• NOT for multi: true
Characteristics of Retryable Writes
# M D B l o c a l# M D B l o c a l
Retryable writes
uri = "mongodb://example.com:27017/?retryWrites=true"
client = MongoClient(uri)
database = client.database
collection = database.collection
# M D B l o c a l# M D B l o c a l
DNS seed list
"mongodb://example1.com:27017,example2.com:27017,example3.com:27017
"mongodb+srv://my-dns-server.mongodb.com
"mongodb://example1.com:27017
# M D B l o c a l# M D B l o c a l
Tunable consistency
Availability Consistencymagic
# M D B l o c a l# M D B l o c a l
• readConcern (Read Isolation)
• Local
• Majority
• Linearizable
• writeConcern (write acknowledgement)
• <number> (i.e. 1)
• Majority
• Tag
What is readConcern and writeConcern?
# M D B l o c a l# M D B l o c a l
Tunable consistency
mongos
3 1
2
Shard 1 Shard 2 Shard 3
readConcern: available
# M D B l o c a l# M D B l o c a l
Tunable consistency
readConcern: available is equivalent to readConcern: local on replica sets
you can pass readConcern: available to a primary in a sharded cluster
readConcern: available is default for secondaries in a sharded cluster
Secondaries in sharded clusters will now respect readConcern : local for safe reads
# M D B l o c a l# M D B l o c a l
Tunable consistency
mongos
3 1
2
Shard 1 Shard 2 Shard 3
Global Logical Clock
wait until cluster time has moved past the last time you saw
Causal consistency:
guarantees monotonic,
logically consistent reads
from any replica node in
the same user session
# M D B l o c a l# M D B l o c a l
Tunable consistency
//start client session, which is causally consistent by default
try (ClientSession session =
client.startSession(ClientSessionOptions.builder().build())) {
//Run causally related operations within the session
collection.insertOne(session, ... );
collection.updateOne(session, ...);
try (MongoCursor<Document> cursor =
collection.find(session).filter(...).iterator()) {
while (cursor.hasNext()) {
Document cur = cursor.next();
}
}
# M D B l o c a l
OPERATIONS
JSON Schema
Network security
Session management
End-to-end Compression
# M D B l o c a l# M D B l o c a l
Network Security
Bind to localhost by Default
IP Whitelisting
• Associate IP addresses or ranges with roles in auth
• If a the IP restrictions are not met, fail to authenticate
• Able to restrict __system user to authenticate from only cluster
nodes
# M D B l o c a l# M D B l o c a l
Network Security
192.168.1.25
Application
Application
System Administrator
192.168.1.48
172.16.4.13
172.16.4.88
172.33.20.62
172.33.20.11
Restrict each user’s
authentication based on:
• Client IP Address Range
and/or
• Server IP Listen Address
# M D B l o c a l# M D B l o c a l
JSON Schema
Enforces strict schema structure over a complete collection
for data governance & quality
• Builds on document validation introduced by restricting new content that
can be added to a document
• Enforces presence, type, and values for document content, including
nested array
• Simplifies application logic
Tunable: enforce document structure, log warnings, or allow
complete schema flexibility
Queryable: identify all existing documents that do not comply
# M D B l o c a l# M D B l o c a l
JSON Schema
db.createCollection( "orders",
{validator: {$jsonSchema:
{properties:
{line_items:
{type: "array",
items:
{properties:
{title: {type: "string"},
price: {type: "number", minimum: 0.0} },
required: ["_id", "title", "price"],
additionalProperties: false}}},
required: ["line_items"]}}}
)
http://json-schema.org/
# M D B l o c a l# M D B l o c a l
Session Management
Server sessions
• Every Operation is wrapped in a server session by default in 3.6
• killSessions by user
Client sessions
• Every operation within a defined client session have causal consistency
• Not by default, must be explicitly defined
# M D B l o c a l# M D B l o c a l
MongoDB 3.6 adds compression
of wire protocol traffic between
client and database
• Up to 80% bandwidth savings
MongoDB End to End
Compression
• Wire protocol
• Intra-cluster
• Indexes in memory
• Storage
Application
MongoDB Primary
Replica
Wire Protocol
Compression
MongoDB Secondary Replica
Single ViewMongoDB Secondary Replica
Single ViewMongoDB Secondary Replica
Single ViewMongoDB Secondary Replica
Single ViewMongoDB Secondary Replica
MongoDB Secondary Replica
Intra-Cluster
Compression
Compression of
Data on Disk
Compression of
Indexes in Memory
End to End
Compression
# M D B l o c a l
# M D B l o c a l
THANK YOU!

More Related Content

What's hot

Hadoop - MongoDB Webinar June 2014
Hadoop - MongoDB Webinar June 2014Hadoop - MongoDB Webinar June 2014
Hadoop - MongoDB Webinar June 2014MongoDB
 
Embedding a language into string interpolator
Embedding a language into string interpolatorEmbedding a language into string interpolator
Embedding a language into string interpolator
Michael Limansky
 
MongoDB dla administratora
MongoDB dla administratora MongoDB dla administratora
MongoDB dla administratora
3camp
 
MongoDB .local Munich 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pip...
MongoDB .local Munich 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pip...MongoDB .local Munich 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pip...
MongoDB .local Munich 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pip...
MongoDB
 
Operational Intelligence with MongoDB Webinar
Operational Intelligence with MongoDB WebinarOperational Intelligence with MongoDB Webinar
Operational Intelligence with MongoDB WebinarMongoDB
 
MongoDB Aggregation
MongoDB Aggregation MongoDB Aggregation
MongoDB Aggregation
Amit Ghosh
 
MongoDB .local Paris 2020: La puissance du Pipeline d'Agrégation de MongoDB
MongoDB .local Paris 2020: La puissance du Pipeline d'Agrégation de MongoDBMongoDB .local Paris 2020: La puissance du Pipeline d'Agrégation de MongoDB
MongoDB .local Paris 2020: La puissance du Pipeline d'Agrégation de MongoDB
MongoDB
 
Data Governance with JSON Schema
Data Governance with JSON SchemaData Governance with JSON Schema
Data Governance with JSON Schema
MongoDB
 
MongoDB .local Toronto 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pi...
MongoDB .local Toronto 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pi...MongoDB .local Toronto 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pi...
MongoDB .local Toronto 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pi...
MongoDB
 
MongoDB .local Chicago 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pi...
MongoDB .local Chicago 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pi...MongoDB .local Chicago 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pi...
MongoDB .local Chicago 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pi...
MongoDB
 
Webinar: Exploring the Aggregation Framework
Webinar: Exploring the Aggregation FrameworkWebinar: Exploring the Aggregation Framework
Webinar: Exploring the Aggregation Framework
MongoDB
 
MongoDB Europe 2016 - Advanced MongoDB Aggregation Pipelines
MongoDB Europe 2016 - Advanced MongoDB Aggregation PipelinesMongoDB Europe 2016 - Advanced MongoDB Aggregation Pipelines
MongoDB Europe 2016 - Advanced MongoDB Aggregation Pipelines
MongoDB
 
MongoDB World 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pipeline Em...
MongoDB World 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pipeline Em...MongoDB World 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pipeline Em...
MongoDB World 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pipeline Em...
MongoDB
 
"Powerful Analysis with the Aggregation Pipeline (Tutorial)"
"Powerful Analysis with the Aggregation Pipeline (Tutorial)""Powerful Analysis with the Aggregation Pipeline (Tutorial)"
"Powerful Analysis with the Aggregation Pipeline (Tutorial)"
MongoDB
 
Agg framework selectgroup feb2015 v2
Agg framework selectgroup feb2015 v2Agg framework selectgroup feb2015 v2
Agg framework selectgroup feb2015 v2
MongoDB
 
ETL for Pros: Getting Data Into MongoDB
ETL for Pros: Getting Data Into MongoDBETL for Pros: Getting Data Into MongoDB
ETL for Pros: Getting Data Into MongoDB
MongoDB
 
Mobile Web 5.0
Mobile Web 5.0Mobile Web 5.0
Mobile Web 5.0
Michael Galpin
 
MongoDB Aggregation Framework
MongoDB Aggregation FrameworkMongoDB Aggregation Framework
MongoDB Aggregation Framework
Caserta
 
Talk MongoDB - Amil
Talk MongoDB - AmilTalk MongoDB - Amil
Talk MongoDB - Amil
Marcelo Cenerino
 
MongoDB Performance Tuning
MongoDB Performance TuningMongoDB Performance Tuning
MongoDB Performance Tuning
Puneet Behl
 

What's hot (20)

Hadoop - MongoDB Webinar June 2014
Hadoop - MongoDB Webinar June 2014Hadoop - MongoDB Webinar June 2014
Hadoop - MongoDB Webinar June 2014
 
Embedding a language into string interpolator
Embedding a language into string interpolatorEmbedding a language into string interpolator
Embedding a language into string interpolator
 
MongoDB dla administratora
MongoDB dla administratora MongoDB dla administratora
MongoDB dla administratora
 
MongoDB .local Munich 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pip...
MongoDB .local Munich 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pip...MongoDB .local Munich 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pip...
MongoDB .local Munich 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pip...
 
Operational Intelligence with MongoDB Webinar
Operational Intelligence with MongoDB WebinarOperational Intelligence with MongoDB Webinar
Operational Intelligence with MongoDB Webinar
 
MongoDB Aggregation
MongoDB Aggregation MongoDB Aggregation
MongoDB Aggregation
 
MongoDB .local Paris 2020: La puissance du Pipeline d'Agrégation de MongoDB
MongoDB .local Paris 2020: La puissance du Pipeline d'Agrégation de MongoDBMongoDB .local Paris 2020: La puissance du Pipeline d'Agrégation de MongoDB
MongoDB .local Paris 2020: La puissance du Pipeline d'Agrégation de MongoDB
 
Data Governance with JSON Schema
Data Governance with JSON SchemaData Governance with JSON Schema
Data Governance with JSON Schema
 
MongoDB .local Toronto 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pi...
MongoDB .local Toronto 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pi...MongoDB .local Toronto 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pi...
MongoDB .local Toronto 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pi...
 
MongoDB .local Chicago 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pi...
MongoDB .local Chicago 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pi...MongoDB .local Chicago 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pi...
MongoDB .local Chicago 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pi...
 
Webinar: Exploring the Aggregation Framework
Webinar: Exploring the Aggregation FrameworkWebinar: Exploring the Aggregation Framework
Webinar: Exploring the Aggregation Framework
 
MongoDB Europe 2016 - Advanced MongoDB Aggregation Pipelines
MongoDB Europe 2016 - Advanced MongoDB Aggregation PipelinesMongoDB Europe 2016 - Advanced MongoDB Aggregation Pipelines
MongoDB Europe 2016 - Advanced MongoDB Aggregation Pipelines
 
MongoDB World 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pipeline Em...
MongoDB World 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pipeline Em...MongoDB World 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pipeline Em...
MongoDB World 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pipeline Em...
 
"Powerful Analysis with the Aggregation Pipeline (Tutorial)"
"Powerful Analysis with the Aggregation Pipeline (Tutorial)""Powerful Analysis with the Aggregation Pipeline (Tutorial)"
"Powerful Analysis with the Aggregation Pipeline (Tutorial)"
 
Agg framework selectgroup feb2015 v2
Agg framework selectgroup feb2015 v2Agg framework selectgroup feb2015 v2
Agg framework selectgroup feb2015 v2
 
ETL for Pros: Getting Data Into MongoDB
ETL for Pros: Getting Data Into MongoDBETL for Pros: Getting Data Into MongoDB
ETL for Pros: Getting Data Into MongoDB
 
Mobile Web 5.0
Mobile Web 5.0Mobile Web 5.0
Mobile Web 5.0
 
MongoDB Aggregation Framework
MongoDB Aggregation FrameworkMongoDB Aggregation Framework
MongoDB Aggregation Framework
 
Talk MongoDB - Amil
Talk MongoDB - AmilTalk MongoDB - Amil
Talk MongoDB - Amil
 
MongoDB Performance Tuning
MongoDB Performance TuningMongoDB Performance Tuning
MongoDB Performance Tuning
 

Similar to How to leverage what's new in MongoDB 3.6

SH 1 - SES 3 - 3.6-Overview-Tel-Aviv.pptx
SH 1 - SES 3 - 3.6-Overview-Tel-Aviv.pptxSH 1 - SES 3 - 3.6-Overview-Tel-Aviv.pptx
SH 1 - SES 3 - 3.6-Overview-Tel-Aviv.pptxMongoDB
 
SH 1 - SES 3 - 3.6-Overview-Tel-Aviv.pptx
SH 1 - SES 3 - 3.6-Overview-Tel-Aviv.pptxSH 1 - SES 3 - 3.6-Overview-Tel-Aviv.pptx
SH 1 - SES 3 - 3.6-Overview-Tel-Aviv.pptxMongoDB
 
Webinar: Applikationsentwicklung mit MongoDB : Teil 5: Reporting & Aggregation
Webinar: Applikationsentwicklung mit MongoDB: Teil 5: Reporting & AggregationWebinar: Applikationsentwicklung mit MongoDB: Teil 5: Reporting & Aggregation
Webinar: Applikationsentwicklung mit MongoDB : Teil 5: Reporting & Aggregation
MongoDB
 
[MongoDB.local Bengaluru 2018] Keynote
[MongoDB.local Bengaluru 2018] Keynote[MongoDB.local Bengaluru 2018] Keynote
[MongoDB.local Bengaluru 2018] Keynote
MongoDB
 
MongoDB.local DC 2018: Tutorial - Data Analytics with MongoDB
MongoDB.local DC 2018: Tutorial - Data Analytics with MongoDBMongoDB.local DC 2018: Tutorial - Data Analytics with MongoDB
MongoDB.local DC 2018: Tutorial - Data Analytics with MongoDB
MongoDB
 
Analytics with MongoDB Aggregation Framework and Hadoop Connector
Analytics with MongoDB Aggregation Framework and Hadoop ConnectorAnalytics with MongoDB Aggregation Framework and Hadoop Connector
Analytics with MongoDB Aggregation Framework and Hadoop Connector
Henrik Ingo
 
MongoDB World 2018: Keynote
MongoDB World 2018: KeynoteMongoDB World 2018: Keynote
MongoDB World 2018: Keynote
MongoDB
 
MongoDB .local Chicago 2019: Best Practices for Working with IoT and Time-ser...
MongoDB .local Chicago 2019: Best Practices for Working with IoT and Time-ser...MongoDB .local Chicago 2019: Best Practices for Working with IoT and Time-ser...
MongoDB .local Chicago 2019: Best Practices for Working with IoT and Time-ser...
MongoDB
 
Query for json databases
Query for json databasesQuery for json databases
Query for json databases
Binh Le
 
1403 app dev series - session 5 - analytics
1403   app dev series - session 5 - analytics1403   app dev series - session 5 - analytics
1403 app dev series - session 5 - analyticsMongoDB
 
MongoDB .local Munich 2019: Best Practices for Working with IoT and Time-seri...
MongoDB .local Munich 2019: Best Practices for Working with IoT and Time-seri...MongoDB .local Munich 2019: Best Practices for Working with IoT and Time-seri...
MongoDB .local Munich 2019: Best Practices for Working with IoT and Time-seri...
MongoDB
 
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series DataMongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB
 
Using MongoDB As a Tick Database
Using MongoDB As a Tick DatabaseUsing MongoDB As a Tick Database
Using MongoDB As a Tick Database
MongoDB
 
Marc s01 e02-crud-database
Marc s01 e02-crud-databaseMarc s01 e02-crud-database
Marc s01 e02-crud-databaseMongoDB
 
Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...
Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...
Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...MongoDB
 
SH 1 - SES 2 part 2 - Tel Aviv MDBlocal - Eliot Keynote.pptx
SH 1 - SES 2 part 2 - Tel Aviv MDBlocal - Eliot Keynote.pptxSH 1 - SES 2 part 2 - Tel Aviv MDBlocal - Eliot Keynote.pptx
SH 1 - SES 2 part 2 - Tel Aviv MDBlocal - Eliot Keynote.pptxMongoDB
 
SH 1 - SES 2 part 2 - Tel Aviv MDBlocal - Eliot Keynote.pptx
SH 1 - SES 2 part 2 - Tel Aviv MDBlocal - Eliot Keynote.pptxSH 1 - SES 2 part 2 - Tel Aviv MDBlocal - Eliot Keynote.pptx
SH 1 - SES 2 part 2 - Tel Aviv MDBlocal - Eliot Keynote.pptxMongoDB
 
Webinar: General Technical Overview of MongoDB for Dev Teams
Webinar: General Technical Overview of MongoDB for Dev TeamsWebinar: General Technical Overview of MongoDB for Dev Teams
Webinar: General Technical Overview of MongoDB for Dev Teams
MongoDB
 
MongoDB With Style
MongoDB With StyleMongoDB With Style
MongoDB With Style
Gabriele Lana
 
MongoDB Meetup
MongoDB MeetupMongoDB Meetup
MongoDB Meetup
Maxime Beugnet
 

Similar to How to leverage what's new in MongoDB 3.6 (20)

SH 1 - SES 3 - 3.6-Overview-Tel-Aviv.pptx
SH 1 - SES 3 - 3.6-Overview-Tel-Aviv.pptxSH 1 - SES 3 - 3.6-Overview-Tel-Aviv.pptx
SH 1 - SES 3 - 3.6-Overview-Tel-Aviv.pptx
 
SH 1 - SES 3 - 3.6-Overview-Tel-Aviv.pptx
SH 1 - SES 3 - 3.6-Overview-Tel-Aviv.pptxSH 1 - SES 3 - 3.6-Overview-Tel-Aviv.pptx
SH 1 - SES 3 - 3.6-Overview-Tel-Aviv.pptx
 
Webinar: Applikationsentwicklung mit MongoDB : Teil 5: Reporting & Aggregation
Webinar: Applikationsentwicklung mit MongoDB: Teil 5: Reporting & AggregationWebinar: Applikationsentwicklung mit MongoDB: Teil 5: Reporting & Aggregation
Webinar: Applikationsentwicklung mit MongoDB : Teil 5: Reporting & Aggregation
 
[MongoDB.local Bengaluru 2018] Keynote
[MongoDB.local Bengaluru 2018] Keynote[MongoDB.local Bengaluru 2018] Keynote
[MongoDB.local Bengaluru 2018] Keynote
 
MongoDB.local DC 2018: Tutorial - Data Analytics with MongoDB
MongoDB.local DC 2018: Tutorial - Data Analytics with MongoDBMongoDB.local DC 2018: Tutorial - Data Analytics with MongoDB
MongoDB.local DC 2018: Tutorial - Data Analytics with MongoDB
 
Analytics with MongoDB Aggregation Framework and Hadoop Connector
Analytics with MongoDB Aggregation Framework and Hadoop ConnectorAnalytics with MongoDB Aggregation Framework and Hadoop Connector
Analytics with MongoDB Aggregation Framework and Hadoop Connector
 
MongoDB World 2018: Keynote
MongoDB World 2018: KeynoteMongoDB World 2018: Keynote
MongoDB World 2018: Keynote
 
MongoDB .local Chicago 2019: Best Practices for Working with IoT and Time-ser...
MongoDB .local Chicago 2019: Best Practices for Working with IoT and Time-ser...MongoDB .local Chicago 2019: Best Practices for Working with IoT and Time-ser...
MongoDB .local Chicago 2019: Best Practices for Working with IoT and Time-ser...
 
Query for json databases
Query for json databasesQuery for json databases
Query for json databases
 
1403 app dev series - session 5 - analytics
1403   app dev series - session 5 - analytics1403   app dev series - session 5 - analytics
1403 app dev series - session 5 - analytics
 
MongoDB .local Munich 2019: Best Practices for Working with IoT and Time-seri...
MongoDB .local Munich 2019: Best Practices for Working with IoT and Time-seri...MongoDB .local Munich 2019: Best Practices for Working with IoT and Time-seri...
MongoDB .local Munich 2019: Best Practices for Working with IoT and Time-seri...
 
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series DataMongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
 
Using MongoDB As a Tick Database
Using MongoDB As a Tick DatabaseUsing MongoDB As a Tick Database
Using MongoDB As a Tick Database
 
Marc s01 e02-crud-database
Marc s01 e02-crud-databaseMarc s01 e02-crud-database
Marc s01 e02-crud-database
 
Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...
Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...
Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...
 
SH 1 - SES 2 part 2 - Tel Aviv MDBlocal - Eliot Keynote.pptx
SH 1 - SES 2 part 2 - Tel Aviv MDBlocal - Eliot Keynote.pptxSH 1 - SES 2 part 2 - Tel Aviv MDBlocal - Eliot Keynote.pptx
SH 1 - SES 2 part 2 - Tel Aviv MDBlocal - Eliot Keynote.pptx
 
SH 1 - SES 2 part 2 - Tel Aviv MDBlocal - Eliot Keynote.pptx
SH 1 - SES 2 part 2 - Tel Aviv MDBlocal - Eliot Keynote.pptxSH 1 - SES 2 part 2 - Tel Aviv MDBlocal - Eliot Keynote.pptx
SH 1 - SES 2 part 2 - Tel Aviv MDBlocal - Eliot Keynote.pptx
 
Webinar: General Technical Overview of MongoDB for Dev Teams
Webinar: General Technical Overview of MongoDB for Dev TeamsWebinar: General Technical Overview of MongoDB for Dev Teams
Webinar: General Technical Overview of MongoDB for Dev Teams
 
MongoDB With Style
MongoDB With StyleMongoDB With Style
MongoDB With Style
 
MongoDB Meetup
MongoDB MeetupMongoDB Meetup
MongoDB Meetup
 

Recently uploaded

Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptxText-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
ShamsuddeenMuhammadA
 
Mobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona InfotechMobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona Infotech
Drona Infotech
 
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
Juraj Vysvader
 
First Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User EndpointsFirst Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User Endpoints
Globus
 
Pro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp BookPro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp Book
abdulrafaychaudhry
 
Game Development with Unity3D (Game Development lecture 3)
Game Development  with Unity3D (Game Development lecture 3)Game Development  with Unity3D (Game Development lecture 3)
Game Development with Unity3D (Game Development lecture 3)
abdulrafaychaudhry
 
A Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of PassageA Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of Passage
Philip Schwarz
 
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissancesAtelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Neo4j
 
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
Alina Yurenko
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
Adele Miller
 
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Globus
 
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus
 
AI Genie Review: World’s First Open AI WordPress Website Creator
AI Genie Review: World’s First Open AI WordPress Website CreatorAI Genie Review: World’s First Open AI WordPress Website Creator
AI Genie Review: World’s First Open AI WordPress Website Creator
Google
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
timtebeek1
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
Google
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
Paco van Beckhoven
 
Nidhi Software Price. Fact , Costs, Tips
Nidhi Software Price. Fact , Costs, TipsNidhi Software Price. Fact , Costs, Tips
Nidhi Software Price. Fact , Costs, Tips
vrstrong314
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
Globus
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
Fermin Galan
 
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of CodeA Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
Aftab Hussain
 

Recently uploaded (20)

Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptxText-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
 
Mobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona InfotechMobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona Infotech
 
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
 
First Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User EndpointsFirst Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User Endpoints
 
Pro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp BookPro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp Book
 
Game Development with Unity3D (Game Development lecture 3)
Game Development  with Unity3D (Game Development lecture 3)Game Development  with Unity3D (Game Development lecture 3)
Game Development with Unity3D (Game Development lecture 3)
 
A Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of PassageA Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of Passage
 
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissancesAtelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissances
 
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
 
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
 
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024
 
AI Genie Review: World’s First Open AI WordPress Website Creator
AI Genie Review: World’s First Open AI WordPress Website CreatorAI Genie Review: World’s First Open AI WordPress Website Creator
AI Genie Review: World’s First Open AI WordPress Website Creator
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
 
Nidhi Software Price. Fact , Costs, Tips
Nidhi Software Price. Fact , Costs, TipsNidhi Software Price. Fact , Costs, Tips
Nidhi Software Price. Fact , Costs, Tips
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
 
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of CodeA Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
 

How to leverage what's new in MongoDB 3.6

  • 1. 1 2 APR IL , 2018 # M D B l o c a l How to leverage what’s new in MongoDB 3.6
  • 2. # M D B l o c a l Maxime Beugnet Developer Advocate EMEA @MongoDB Paris Twitter : @MBeugnet Github : MaBeuLux88 Email : maxime@mongodb.com Meetups Hackathons Workshops Conferences
  • 3. # M D B l o c a l MONGODB 3.6 THEMES
  • 4. # M D B l o c a l To make your life easier…
  • 5. # M D B l o c a l# M D B l o c a l Realtime Expressibili ty Analytics Application Availability Operations
  • 6. # M D B l o c a l REALTIME CHANGE STREAMS
  • 7. # M D B l o c a l# M D B l o c a l updatereplaceinsertdeleteMongoDB Application Action
  • 8. # M D B l o c a l# M D B l o c a l db.coll.watch() db.coll.watch([{$match: {operationType: “insert”}}]) db.coll.watch([], {fullDocument:“updateLookup”}) db.coll.watch([], {resumeAfter:<cachedResumeToken>}) Change streams • $match • $project • $addFields • $replaceRoot • $redact
  • 9. # M D B l o c a l# M D B l o c a l cursor = db.users.watch([ ], {"fullDocument":"updateLookup"}); while ( !cursor.isExhausted() ) { if ( cursor.hasNext() ) { print(tojson(cursor.next())); } } Change streams => cursors
  • 10. # M D B l o c a l# M D B l o c a l •Resumable •Targeted Changes •Total ordering •Durability •Security •Ease of use •Idempotence Characteristics of Change Streams
  • 11. # M D B l o c a l EXPRESSIBILITY More expressive query language Array updates
  • 12. # M D B l o c a l# M D B l o c a l db.products.find( { $expr: { $gt: [ "$currRating" , "$prevRating" ] } } ) Comparing Fields within a document
  • 13. # M D B l o c a l# M D B l o c a l db.products.find( { $expr: { $gt: [ {$subtract: ["$currRating" ,"$prevRating"] }, 2] } } ) Comparing Fields within a document
  • 14. # M D B l o c a l# M D B l o c a l Comparing Fields within a document db.supplies.find( { $expr: { $lt:[ { $cond: { if: { $gte: ["$qty", 100] }, then: { $divide: ["$price", 2] }, else: { $divide: ["$price", 4] } } }, 5 ] } })
  • 15. # M D B l o c a l# M D B l o c a l Expressive Array updates Update all matching items in an array Match Nested Arrays
  • 16. # M D B l o c a l# M D B l o c a l Expressive Array updates MongoDB V3.4 • $ • $addToSet • $pop • $pull • $push • $pullAll { _id: 1, grades: [ { exam: 80, quizz: 75}, { exam: 85, quizz: 90} ] } db.students.update( { _id: 1, "grades.exam": 85 }, { $set: { "grades.$.quizz" : 95 } } )
  • 17. # M D B l o c a l# M D B l o c a l Expressive Array updates MongoDB V3.6 • $[<id>] • $[] { _id: 1, grades: [ { exam: 80, quizz: 75}, { exam: 85, quizz: 90} ] } db.students.update( { }, { $set: { "grades.$[elem].quizz" : 100 } }, { multi: true, arrayFilters: [ { "elem.exam": { $gte: 80 } } ] } ) db.students.update( { }, { $set: { "grades.$[].quizz" : 100 } }, { multi: true } )
  • 18. # M D B l o c a l# M D B l o c a l Expressive Array updates { _id: 1, name: "X", Medications: [ { id: 23, name: "DrugName99", Sched:"I", Rx: [ { id:13, Qty: 60, started: "2009-01-01" }, { id:77, Qty: 30, started: "2011-02-01", current:true } ]}, { id: 41, name: "OtherDrugName", Sched: "II, Rx: […] }, { id: 59, name: "ThirdDrug", Sched:"I", Rx:[ { id:994, Qty: 60, started: "2012-01-01", current:true }, { id:1034, Qty: 90, started: "2007-02-01" } ]}, "lastVisit": ISODate("2017-01-22T13:01:13.000Z") }
  • 19. # M D B l o c a l# M D B l o c a l Expressive Array updates { _id: 1, name: "X", Medications: [ { id: 23, Sched:"I", Rx: [ { id:13, Qty: 60}, { id:77, Qty: 30, current:true} ]}, { id: 41, Sched: "II" }, { id: 59, Sched:"I", Rx:[ { id:994, Qty: 60, current:true}, { id:1034, Qty: 90} ]} ] } db.patientRx.update( {}, {"$set": {"Medications.$[med].Rx.$[rx].Qty": 20}}, { "multi": true, "arrayFilters": [ {"med.Sched": "I"}, {"rx.current":true, "rx.Qty":{$gt:30}} ]} )
  • 20. # M D B l o c a l# M D B l o c a l Expressive Array updates { _id: 1, name: "X", Medications: [ { id: 23, Sched:"I", Rx: [ { id:13, Qty: 60}, { id:77, Qty: 30, current:true} ]}, { id: 41, Sched: "II" }, { id: 59, Sched:"I", Rx:[ { id:994, Qty: 60, current:true}, { id:1034, Qty: 90} ]} } db.patientRx.update( {"Medications": {"$elemMatch": { "Sched": "II", "Rx": {"$elemMatch": { "current": true, "Qty": {"$gt": 30} }} }}}, {"$set": {"Medications.$[med].Rx.$[rx].Qty": 20}}, { "multi": true, "arrayFilters": [ {"med.Sched": "I"}, {"rx.current":true, "rx.Qty":{$gt:30}} ]} )
  • 21. # M D B l o c a l ANALYTICS New operators Timezone support Expressive $lookup R Driver BI Connector
  • 22. # M D B l o c a l# M D B l o c a l New operators
  • 23. # M D B l o c a l# M D B l o c a l New operators : $arrayToObject { "_id" : 1, dimensions: [ { "k": "l", "v": 25} , { "k": "w", "v": 10 }, { "k": "uom", "v": "cm" } ] } { "_id" : 2, dimensions: [ [ "l", 50 ], [ "w", 25 ], [ "uom", "cm" ] ] } { "_id" : 3, dimensions: [ [ "l", 50 ], [ "l", 25 ], [ "l", "cm" ] ] } db.inventory.aggregate( [ { $project: { dimensions: { $arrayToObject: "$dimensions" } } } ] ) { "_id" : 1, "dimensions" : { "l" : 25, "w" : 10, "uom" : "cm" } } { "_id" : 2, "dimensions" : { "l" : 50, "w" : 25, "uom" : "cm" } } { "_id" : 3, "dimensions" : { "l" : 50 } }
  • 24. # M D B l o c a l# M D B l o c a l New operators : $objectToArray { $objectToArray: { item: "foo", qty: 25, size: { len: 25, w: 10, uom: "cm" } } } [ { "k" : "item", "v" : "foo" }, { "k" : "qty", "v" : 25 }, { "k" : "size", "v" : { "len" : 25, "w" : 10, "uom" : "cm" } } ]
  • 25. # M D B l o c a l# M D B l o c a l New operators : $mergeObjects { $mergeObjects: [ { a: 1 }, { a: 2, b: 2 }, { a: 3, b: null, c: 3 } ] } { a: 3, b: null, c: 3 }
  • 26. # M D B l o c a l# M D B l o c a l New operators : $dateFromString { _id: 1, date: "2017-02-08T12:10:40.787, timezone: "America/New_York" }, { _id: 2, date: "2017-02-08" , timezone: "-05:00" }, { _id: 3 } db.logmessages.aggregate( [ { $project: { date: { $dateFromString: { dateString: '$date', timezone: '$timezone’ } } } } ] ) { "_id" : 1, "date" : ISODate("2017-02-08T17:10:40.787Z") } { "_id" : 2, "date" : ISODate("2017-02-08T05:00:00Z") } { "_id" : 3, "date" : null }
  • 27. # M D B l o c a l# M D B l o c a l New operators : $dateFromParts db.sales.aggregate([ { $project: { date: { $dateFromParts: { 'year' : 2017, 'month' : 2, 'day': 8, 'hour' : 12 } }, date_iso: { $dateFromParts: { 'isoWeekYear' : 2017, 'isoWeek' : 6, 'isoDayOfWeek' : 3, 'hour' : 12 } }, date_timezone: { $dateFromParts: { 'year' : 2016, 'month' : 12, 'day' : 31, 'hour' : 23, 'minute' : 46, 'second' : 12, 'timezone' : 'America/New_York’ } } } }]) { "_id" : 1, "date" : ISODate("2017-02-08T12:00:00Z"), "date_iso" : ISODate("2017-02-08T12:00:00Z"), "date_timezone" : ISODate("2017-01-01T04:46:12Z") }
  • 28. # M D B l o c a l# M D B l o c a l New operators : $dateToParts db.sales.aggregate([ { $project: { date: { $dateToParts: { date: "$date" } }, date_iso: { $dateToParts: { date: "$date", iso8601: true } }, date_timezone: { $dateToParts: { date: "$date", timezone: "America/New_York" } } } }]) { "_id" : 2, "date" : { "year" : 2017, "month" : 1, "day" : 1, "hour" : 1, "minute" : 29, "second" : 9, "millisecond" : 123 }, "date_iso" : { "isoWeekYear" : 2016, "isoWeek" : 52, "isoDayOfWeek" : 7, "hour" : 1, "minute" : 29, "second" : 9, "millisecond" : 123 }, "date_timezone" : { "year" : 2016, "month" : 12, "day" : 31, "hour" : 20, "minute" : 29, "second" : 9, "millisecond" : 123 } }
  • 29. # M D B l o c a l# M D B l o c a l Timezone support $dayOfYear, $dayOfMonth, $dayOfWeek, $year, $month, $week, $hour, $minute, $second, $millisecond, $isoDayOfWeek, $isoWeek, $isoWeekYear { $operator: { date: <isoDateExpression>, timezone: <tzExpression> } }
  • 30. # M D B l o c a l# M D B l o c a l >db.collection.aggregate({$lookup:{ from:"coll2", localField:"x", foreignField:"y", as:"coll2details" }}]) More expressive $lookup >db.collection.aggregate({$lookup:{ from:"coll2", let: {x: "$x"}, pipeline: [ {$match: {$expr: {$eq: [ "$y", "$$x"] } } } ] as:"coll2details" }}]) Prior to 3.6 New in 3.6
  • 31. # M D B l o c a l# M D B l o c a l $lookup example orders: { line_items : [ { id: 123, title : “USB Battery”, price: 15.0 }, { id: 512, title : “Hip T-shirt”, price : 45.0 } ] } db.orders.aggregate([ {$unwind: "$line_items"}, {$lookup:{ from: "reviews", let: {p_id: "$line_items.id"}, pipeline: [ {$match: {$expr: {$eq: ["$p_id","$$p_id"]}}}, {$group: { _id: 1, rating: {$avg:"$rating"}}} ], as: "avgRating" } } ])
  • 32. # M D B l o c a l# M D B l o c a l Recommended MongoDB R driver for data scientists, developers & statisticians • MongoDB read & write concerns to control data consistency & durability • Idiomatic, native language access to the database • Data security with enterprise authentication mechanisms • BSON data type support, e.g., Decimal 128 for high precision scientific & financial analysis R Driver for MongoDB
  • 33. # M D B l o c a l# M D B l o c a l MongoDB Connector for BI + many more
  • 34. # M D B l o c a l# M D B l o c a l MongoDB Connector for BI • Faster • Takes advantage of 3.6 expressive Lookup to push more computation into the database • Supports Show Status function to enable deeper performance optimization • Simpler • Lifecycle management with Ops Manager • Schema sampling and mapping now managed by the mongosqld process, rather than separate utility (mongodrdl) • Authenticate via client-side plugins, rather than managing TLS certificates. Kerberos support added
  • 35. # M D B l o c a l APPLICATIONS AVAILABILITY Retryable writes DNS seed list Read Concern: Available & Tunable consistency
  • 36. # M D B l o c a l# M D B l o c a l Retryable writes PS S Application P write successful :D write unsuccessful :O
  • 37. # M D B l o c a l# M D B l o c a l Retryable writes Application MongoDB { _id: 1, team : "Manchester United", gameID: "game123", coach : "José Mourinho", score : 2, league: "Premier League" } { _id: 2, team : "Chelsea", gameID: "game456", coach : "Antonio Conte", score : 2, league: "Premier League" } db.games.update( {gameID:"game123"}, {$inc: {score:1}} ) db.games.update( {team: "Chelsea"}, {$set: {coach:"Zidane"}} )
  • 38. # M D B l o c a l# M D B l o c a l • Automatic Drivers logic • Network errors • Elections • NOT for logic errors • Safe • For both non-idempotent and idempotent writes • NOT for multi: true Characteristics of Retryable Writes
  • 39. # M D B l o c a l# M D B l o c a l Retryable writes uri = "mongodb://example.com:27017/?retryWrites=true" client = MongoClient(uri) database = client.database collection = database.collection
  • 40. # M D B l o c a l# M D B l o c a l DNS seed list "mongodb://example1.com:27017,example2.com:27017,example3.com:27017 "mongodb+srv://my-dns-server.mongodb.com "mongodb://example1.com:27017
  • 41. # M D B l o c a l# M D B l o c a l Tunable consistency Availability Consistencymagic
  • 42. # M D B l o c a l# M D B l o c a l • readConcern (Read Isolation) • Local • Majority • Linearizable • writeConcern (write acknowledgement) • <number> (i.e. 1) • Majority • Tag What is readConcern and writeConcern?
  • 43. # M D B l o c a l# M D B l o c a l Tunable consistency mongos 3 1 2 Shard 1 Shard 2 Shard 3 readConcern: available
  • 44. # M D B l o c a l# M D B l o c a l Tunable consistency readConcern: available is equivalent to readConcern: local on replica sets you can pass readConcern: available to a primary in a sharded cluster readConcern: available is default for secondaries in a sharded cluster Secondaries in sharded clusters will now respect readConcern : local for safe reads
  • 45. # M D B l o c a l# M D B l o c a l Tunable consistency mongos 3 1 2 Shard 1 Shard 2 Shard 3 Global Logical Clock wait until cluster time has moved past the last time you saw Causal consistency: guarantees monotonic, logically consistent reads from any replica node in the same user session
  • 46. # M D B l o c a l# M D B l o c a l Tunable consistency //start client session, which is causally consistent by default try (ClientSession session = client.startSession(ClientSessionOptions.builder().build())) { //Run causally related operations within the session collection.insertOne(session, ... ); collection.updateOne(session, ...); try (MongoCursor<Document> cursor = collection.find(session).filter(...).iterator()) { while (cursor.hasNext()) { Document cur = cursor.next(); } }
  • 47. # M D B l o c a l OPERATIONS JSON Schema Network security Session management End-to-end Compression
  • 48. # M D B l o c a l# M D B l o c a l Network Security Bind to localhost by Default IP Whitelisting • Associate IP addresses or ranges with roles in auth • If a the IP restrictions are not met, fail to authenticate • Able to restrict __system user to authenticate from only cluster nodes
  • 49. # M D B l o c a l# M D B l o c a l Network Security 192.168.1.25 Application Application System Administrator 192.168.1.48 172.16.4.13 172.16.4.88 172.33.20.62 172.33.20.11 Restrict each user’s authentication based on: • Client IP Address Range and/or • Server IP Listen Address
  • 50. # M D B l o c a l# M D B l o c a l JSON Schema Enforces strict schema structure over a complete collection for data governance & quality • Builds on document validation introduced by restricting new content that can be added to a document • Enforces presence, type, and values for document content, including nested array • Simplifies application logic Tunable: enforce document structure, log warnings, or allow complete schema flexibility Queryable: identify all existing documents that do not comply
  • 51. # M D B l o c a l# M D B l o c a l JSON Schema db.createCollection( "orders", {validator: {$jsonSchema: {properties: {line_items: {type: "array", items: {properties: {title: {type: "string"}, price: {type: "number", minimum: 0.0} }, required: ["_id", "title", "price"], additionalProperties: false}}}, required: ["line_items"]}}} ) http://json-schema.org/
  • 52. # M D B l o c a l# M D B l o c a l Session Management Server sessions • Every Operation is wrapped in a server session by default in 3.6 • killSessions by user Client sessions • Every operation within a defined client session have causal consistency • Not by default, must be explicitly defined
  • 53. # M D B l o c a l# M D B l o c a l MongoDB 3.6 adds compression of wire protocol traffic between client and database • Up to 80% bandwidth savings MongoDB End to End Compression • Wire protocol • Intra-cluster • Indexes in memory • Storage Application MongoDB Primary Replica Wire Protocol Compression MongoDB Secondary Replica Single ViewMongoDB Secondary Replica Single ViewMongoDB Secondary Replica Single ViewMongoDB Secondary Replica Single ViewMongoDB Secondary Replica MongoDB Secondary Replica Intra-Cluster Compression Compression of Data on Disk Compression of Indexes in Memory End to End Compression
  • 54. # M D B l o c a l
  • 55. # M D B l o c a l THANK YOU!