Bonjour,
Dans le cadre d’un cours de base de données, je dois réaliser une requête avec MongoDB sur une collection comportant une liste de films avec chacun une liste d’acteurs, la requête étant la suivante :
Recuperer le "title" et les "actors" des films dans lesquels joue un(e) (au moins) acteur(rice) ayant comme initiales C C
output schema: {title: ..., actors: ...}
Seulement, ces initiales doivent être celles du premier et du dernier nom d’un acteur (sans prendre en compte les nom intermédiaires/composés donc). J’ai réussi une requête en utilisant du JS :
Code js : Sélectionner tout - Visualiser dans une fenêtre à part
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 var tab = []; db.movieDetails.aggregate( [ { $unwind : "$actors" },{ $project: { names : { $split : ["$actors", " "] }, title : 1, actors : 1 } },{ $project: { firstname : { $arrayElemAt : ["$names",0] }, lastname : { $arrayElemAt : ["$names",-1] }, actors : 1, title : 1 } },{ $match : { firstname : /^C.*/, lastname : /^C.*/ } },{ $group : { _id : "$_id" } } ] ).forEach(function(myDoc){ tab.push(myDoc._id); }) db.movieDetails.find({ _id : {$in : tab} },{ _id : 0, title : 1, actors : 1 })
Seulement nous devons réaliser cette requête en une seule étape (pas de query intermédiaire).
Quelqu’un saurait il comment faire ? Cela fait un bon moment que je suis bloqué là-dessus.
Merci à tous
Partager