SlideShare une entreprise Scribd logo
1  sur  55
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!

Contenu connexe

Tendances

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 interpolatorMichael 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 MongoDBMongoDB
 
Data Governance with JSON Schema
Data Governance with JSON SchemaData Governance with JSON Schema
Data Governance with JSON SchemaMongoDB
 
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 FrameworkMongoDB
 
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 PipelinesMongoDB
 
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 v2MongoDB
 
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 MongoDBMongoDB
 
MongoDB Aggregation Framework
MongoDB Aggregation FrameworkMongoDB Aggregation Framework
MongoDB Aggregation FrameworkCaserta
 
MongoDB Performance Tuning
MongoDB Performance TuningMongoDB Performance Tuning
MongoDB Performance TuningPuneet Behl
 

Tendances (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
 

Similaire à 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 & AggregationMongoDB
 
[MongoDB.local Bengaluru 2018] Keynote
[MongoDB.local Bengaluru 2018] Keynote[MongoDB.local Bengaluru 2018] Keynote
[MongoDB.local Bengaluru 2018] KeynoteMongoDB
 
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 MongoDBMongoDB
 
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 ConnectorHenrik Ingo
 
MongoDB World 2018: Keynote
MongoDB World 2018: KeynoteMongoDB World 2018: Keynote
MongoDB World 2018: KeynoteMongoDB
 
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 databasesBinh 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 DataMongoDB
 
Using MongoDB As a Tick Database
Using MongoDB As a Tick DatabaseUsing MongoDB As a Tick Database
Using MongoDB As a Tick DatabaseMongoDB
 
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 TeamsMongoDB
 

Similaire à 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
 

Dernier

Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension AidPhilip Schwarz
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesVictorSzoltysek
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...Shane Coughlan
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...Jittipong Loespradit
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park masabamasaba
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrandmasabamasaba
 
BUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptxBUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptxalwaysnagaraju26
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech studentsHimanshiGarg82
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfproinshot.com
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplatePresentation.STUDIO
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfkalichargn70th171
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisamasabamasaba
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Steffen Staab
 
ManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide DeckManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide DeckManageIQ
 

Dernier (20)

Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand
 
BUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptxBUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptx
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdf
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
ManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide DeckManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide Deck
 

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!