MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Qual é o operador $ unwind no MongoDB?


Primeiramente, bem-vindo ao MongoDB!

A coisa a lembrar é que o MongoDB emprega uma abordagem "NoSQL" para armazenamento de dados, então pereça os pensamentos de seleções, junções, etc. de sua mente. A maneira como armazena seus dados é na forma de documentos e coleções, o que permite um meio dinâmico de adicionar e obter os dados de seus locais de armazenamento.

Dito isto, para entender o conceito por trás do parâmetro $unwind, primeiro você deve entender o que o caso de uso que você está tentando citar está dizendo. O documento de exemplo do mongodb.org é o seguinte:
{
 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 como as tags são na verdade uma matriz de 3 itens, neste caso sendo "divertido", "bom" e "divertido".

O que $ unwind faz é permitir que você retire um documento para cada elemento e retorne o documento resultante. esse item".

Assim, o resultado da execução do seguinte:
db.article.aggregate(
    { $project : {
        author : 1 ,
        title : 1 ,
        tags : 1
    }},
    { $unwind : "$tags" }
);

devolveria os seguintes 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
}

Observe que a única coisa que muda no array de resultados é o que está sendo retornado no valor das tags. Se você precisar de uma referência adicional sobre como isso funciona, incluí um link aqui. Espero que isso ajude e boa sorte com sua incursão em um dos melhores sistemas NoSQL que encontrei até agora.