sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Qué es el operador $unwind en MongoDB?

En primer lugar, ¡bienvenido a MongoDB!

Lo que debe recordar es que MongoDB emplea un enfoque "NoSQL" para el almacenamiento de datos, por lo tanto, elimine los pensamientos de selecciones, uniones, etc. de su mente. La forma en que almacena sus datos es en forma de documentos y colecciones, lo que permite un medio dinámico para agregar y obtener los datos de sus ubicaciones de almacenamiento.

Dicho esto, para comprender el concepto detrás del parámetro $unwind, primero debe comprender qué dice el caso de uso que está tratando de citar. El documento de ejemplo de mongodb.org es el siguiente:

{
 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 }
}

Observe cómo las etiquetas son en realidad una matriz de 3 elementos, en este caso, "divertido", "bueno" y "divertido".

Lo que hace $unwind es permitirle separar un documento para cada elemento y devolver el documento resultante. Para pensar en esto con un enfoque clásico, sería el equivalente a "para cada elemento de la matriz de etiquetas, devuelva un documento con solo ese artículo".

Por lo tanto, el resultado de ejecutar lo siguiente:

db.article.aggregate(
    { $project : {
        author : 1 ,
        title : 1 ,
        tags : 1
    }},
    { $unwind : "$tags" }
);

devolvería los siguientes documentos:

{
     "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
}

Tenga en cuenta que lo único que cambia en la matriz de resultados es lo que se devuelve en el valor de las etiquetas. Si necesita una referencia adicional sobre cómo funciona esto, he incluido un enlace aquí. Espero que esto ayude, y buena suerte con tu incursión en uno de los mejores sistemas NoSQL que he encontrado hasta ahora.