-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathconsultas.js
184 lines (165 loc) · 5.13 KB
/
consultas.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
// FIND: retorna todos as plataformas de streaming que estão no banco de dados
db.streamings.find().pretty();
// SIZE: lista as inscrições com 1 plataforma de streaming
db.subscriptions.find({platforms:{$size: 1}}).pretty();
// AGGREGATE, GROUP, MAX
db.visual_media.aggregate( [
// Filtra as mídias buscando os que são filmes
{
$match: { "type": "filme"}
},
// Agrupa os filmes com base em gênero e diz qual é a nota do que tem a maior avaliação
{
$group: { _id: "$genre", highest_rating: {$max: "$imdb_score"}}
}
]);
// MATCH: lista todas as inscrições que contêm combos
db.subscriptions.aggregate([{$match : {combo: true}}]);
// GTE: seleciona todos os filmes/séries que tem nota maior ou igual a 8.5 no IMDB
//Mostra os selecionados com título e nota em ordem crescente
db.visual_media.find({
imdb_score: {
$gte: 8.5
}
}, {
title: 1,
imdb_score: 1
}).sort({imdb_score : 1});
// SUM: mostra a soma de todos os valores de inscrição, agrupado por tipo de plano (mensal ou anual)
db.subscriptions.aggregate(
[
{
$group:
{
_id: "$duration",
total: { $sum: "$subscription_fee"},
}
}
]
)
// COUNT: conta a quantidade total de filmes/séries
db.visual_media.count();
// PROJECT, COND
// Faz uma comparação de todas os pacotes e os classifica entre caro e barato
db.subscriptions.aggregate(
[
{
$project:
{
_id: 0,
name: 1,
subscription_fee:
{$cond: {if: {$gte: ["$subscription_fee", 100]}, then: "Caro", else: "Barato"}},
}
}
]
);
// TEXT, SEARCH
// Procura filmes/séries cujo nome do diretor contém "Miyazaki"
db.visual_media.createIndex( { director: "text" } )
db.visual_media.find( { $text: { $search: "Miyazaki"} } )
// ALL
// Seleciona os combos que oferecem Netflix e Disney+ simultaneamente
db.subscriptions.find({platforms: {$all: [
db.streamings.findOne({"name": "Netflix"}),
db.streamings.findOne({"name": "Disney+"}),
]}}).pretty();
// LIMIT:
// Retorna apenas 2 combos
db.subscriptions.aggregate([
{$match : {combo: true}},
{$limit: 2}
]);
// WHERE E FUNCTION
// Retorna informações da mídia visual cujo nome é "House, M.D."
db.visual_media.find({$where: function(){return (this.title == "House, M.D.")}})
// AVG E LOOKUP
// Calcula a nota media dos filmes de cada serviço de streaming
db.streamings.aggregate([
{ $lookup: {
from: "visual_media",
localField: "media",
foreignField: "_id",
as: "media_info"
} },
{ $set: {
"media": "$media_info"
} },
{ $project: {
"media_info": 0
} },
{ $unwind: "$media" },
{ $group: {
_id: "$name",
average_imdb: { $avg: "$media.imdb_score"}
} }
]);
// FINDONE
// Retorna uma mídia (filme ou série) que tenha o selo must see do metacritic ou cuja noja do imdb é maior ou igual a 8.5
db.visual_media.findOne(
{
$or: [ {metacritic_must_see: true},
{ 'imdb_score' : {$gte: 8.5}},
]
}
)
// FILTER
// Retorna as inscrições que contêm plataformas fundadas a partir de 1 de janeiro de 2017
db.subscriptions.aggregate( [
{
$project: {
name: 1, _id: 0,
platforms: {
$filter: {
input: "$platforms",
as: "platform",
cond: { $gte: [ "$$platform.founded", new Date("2017-01-01") ] }
},
},
},
},
]);
//MAPREDUCE, FUNCTION
// Exibe a quantidade de telas de cada inscrição, seja individual ou seja pacote
var mapFun = function(){
emit(this.name, this.screens)
};
var reduceFun = function(name, amount){
const screen_number = amount.reduce((a, b) => a + b, 0);
return (name, screen_number)
};
db.subscriptions.mapReduce(
mapFun,
reduceFun,
{
out: 'map_reduce_saida'
}
);
db.map_reduce_saida.find();
// SET
// Rodar db.subscriptions.find().pretty(); antes e depois para mostrar que houve a mudança
// Muda o nome do Pacote To Rule Them All para Combo Expelliarmus
db.subscriptions.updateOne({name: "Pacote To Rule Them All"}, {$set:{"name": "Combo Expelliarmus"}});
// EXIST
// Ele tira metacritic da coleção cidade de Deus pois é falso, logo após lista a obra visual que não possui a característica metacritic
db.visual_media.updateOne({title: "Cidade De Deus"}, {$unset: {"metacritic_must_see": null}});
db.visual_media.find({metacritic_must_see: {$exists: false}})
// ADDTOSET
// Adiciona os serviços HBO Max e Netflix ao Pacote Não Falamos do Bruno
// para mostrar
// db.subscriptions.find({name : "Pacote Não falamos do Bruno"}).pretty();
db.subscriptions.updateMany(
{name: "Pacote Não falamos do Bruno"}, {$addToSet:{
platforms:{
$each:[
db.streamings.findOne({name: "HBO Max"}),
db.streamings.findOne({name: "Netflix"})
]
}
}}
);
//---------------RODAR POR ÚLTIMO-----------------------
// RENAMECOLLECTION
// Muda o nome da Coleção visual_media para media_set
// Para conferir db.getCollectionNames()
db.visual_media.renameCollection("media_set");