Tout d'abord, bienvenue sur MongoDB!
La chose à retenir est que MongoDB emploie une approche «NoSQL» pour le stockage des données, donc disparaissent de votre esprit les pensées de sélection, de jointure, etc. La façon dont il stocke vos données se présente sous la forme de documents et de collections, ce qui permet un moyen dynamique d'ajouter et d'obtenir les données de vos emplacements de stockage.
Cela étant dit, afin de comprendre le concept derrière le paramètre $ unwind, vous devez d'abord comprendre ce que dit le cas d'utilisation que vous essayez de citer. L'exemple de document de mongodb.org est le suivant:
{
title : "this is my title" ,
author : "bob" ,
posted : new Date () ,
pageViews : 5 ,
tags : [ "fun" , "good" , "fun" ] ,
comments : [
{ author :"joe" , text : "this is cool" } ,
{ author :"sam" , text : "this is bad" }
],
other : { foo : 5 }
}
Remarquez que les balises sont en fait un tableau de 3 éléments, dans ce cas étant "fun", "good" et "fun".
Ce que fait $ unwind, c'est vous permettre de décoller un document pour chaque élément et de renvoyer ce document résultant. Pour penser à cela dans une approche classique, ce serait l'équivalent de "pour chaque élément du tableau de balises, renvoyer un document avec uniquement cet élément".
Ainsi, le résultat de l'exécution de ce qui suit:
db.article.aggregate(
{ $project : {
author : 1 ,
title : 1 ,
tags : 1
}},
{ $unwind : "$tags" }
);
renverrait les documents suivants:
{
"result" : [
{
"_id" : ObjectId("4e6e4ef557b77501a49233f6"),
"title" : "this is my title",
"author" : "bob",
"tags" : "fun"
},
{
"_id" : ObjectId("4e6e4ef557b77501a49233f6"),
"title" : "this is my title",
"author" : "bob",
"tags" : "good"
},
{
"_id" : ObjectId("4e6e4ef557b77501a49233f6"),
"title" : "this is my title",
"author" : "bob",
"tags" : "fun"
}
],
"OK" : 1
}
Notez que la seule chose qui change dans le tableau de résultats est ce qui est renvoyé dans la valeur des balises. Si vous avez besoin d'une référence supplémentaire sur la façon dont cela fonctionne, j'ai inclus un lien ici . J'espère que cela vous aidera, et bonne chance pour votre incursion dans l'un des meilleurs systèmes NoSQL que j'ai rencontrés jusqu'à présent.
Selon la documentation officielle de mongodb:
$ unwind Déconstruit un champ de tableau à partir des documents d'entrée pour générer un document pour chaque élément. Chaque document de sortie est le document d'entrée avec la valeur du champ de tableau remplacée par l'élément.
Explication par l'exemple de base:
Un inventaire de collection contient les documents suivants:
Les opérations $ unwind suivantes sont équivalentes et renvoient un document pour chaque élément du champ des tailles . Si le champ des tailles ne se résout pas en un tableau mais n'est pas manquant, nul ou vide, $ unwind traite l'opérande non-tableau comme un tableau à un seul élément.
ou
Au-dessus de la sortie de la requête:
Pourquoi est-ce nécessaire?
$ unwind est très utile lors de l'agrégation. il divise un document complexe / imbriqué en un document simple avant d'effectuer diverses opérations telles que le tri, la recherche, etc.
Pour en savoir plus sur $ dérouler:
https://docs.mongodb.com/manual/reference/operator/aggregation/unwind/
Pour en savoir plus sur l'agrégation:
https://docs.mongodb.com/manual/reference/operator/aggregation-pipeline/
la source
considérez l'exemple ci-dessous pour comprendre ces données dans une collection
Requête - db.test1.aggregate ([{$ unwind: "$ tailles"}]);
production
la source
Permettez-moi de vous expliquer d'une manière corrélée au SGBDR. Voici la déclaration:
à appliquer au document / enregistrement :
Le $ project / Select renvoie simplement ces champs / colonnes comme
Vient ensuite la partie amusante de Mongo, considérez ce tableau
tags : [ "fun" , "good" , "fun" ]
comme une autre table associée (ne peut pas être une table de recherche / référence car les valeurs ont une certaine duplication) nommée "tags". Rappelez-vous que SELECT produit généralement des choses verticales, donc dérouler les "balises" consiste à diviser () verticalement en "balises" de table.Le résultat final de $ project + $ unwind:
Traduisez la sortie en JSON:
Parce que nous n'avons pas dit à Mongo d'omettre le champ "_id", il est donc ajouté automatiquement.
la source