4.1 Collection method find()

The collection method find() performs a query on a collection, or a view, and returns a cursor object. Its definition is:

db.collection.find(query, projection)

where query specifies a selection filter using query operators, and projection specifies the fields to return in the documents.

With no parameters, all documents with all their fields are returned. If query is specified as an empty document ({}), all documents are returned.

Query examples using the find() method in the mongo shell:

4.1.1 – Find all documents in the pages collection, and display the results in an easy-to-read format.

> db.pages.find().pretty();

4.1.2 – Find the top five documents in the pages collection, and display their titles

> db.pages.find({}, {title: 1}).limit(5);
{ "_id" : ObjectId("5afb15e2ee1a454de6453997"), "title" : "Morro da Viúva" }
{ "_id" : ObjectId("5afb15e2ee1a454de6453998"), "title" : "Morro da Viúva" }
{ "_id" : ObjectId("5afb15e2ee1a454de6453999"), "title" : "As Cadeirinhas" }
{ "_id" : ObjectId("5afb15e2ee1a454de645399a"), "title" : "A Lage" }
{ "_id" : ObjectId("5afb15e2ee1a454de645399b"), "title" : "Laranjeiras" }

4.1.3 – Find the fifth document in the pages collection, and display its title

> db.pages.find({}, {title: 1}).skip(4).limit(1);
{ "_id" : ObjectId("5afb15e2ee1a454de645399b"), "title" : "Laranjeiras" }

4.1.4 – Find all documents in the pages collection with title “Avenida Central”, and display the excerpt in an easy-to-read format

> db.pages.find( { title : "Avenida Central" }, { excerpt: 1 } ).pretty();
{
        "_id" : ObjectId("5afb15e2ee1a454de64539f4"),
        "excerpt" : "A AVENIDA Central foi construída pelo Governo Federal, sob a direção do engenheiro . A Municipalidade não podia meter ombros a tal iniciativa: rasgar uma Avenida de 1.800 metros através de 18 ruas apinhadas de habitações e estabelecimentos que, por estarem no centro comercial, representavam propriedades de imenso valor. Os trabalhos de abertura do novo … Continue lendo \"Avenida Central\""
}
{
        "_id" : ObjectId("5afb15e2ee1a454de6453bcf"),
        "excerpt" : "Região localizada no entorno da antiga Avenida Central, atual Avenida Rio Branco, da Praça Mauá até a Avenida Beira Mar, incluindo o Largo da Carioca, a Cinelândia e o Passeio Público, limitada a leste pela região da Praça XV de Novembro e a Oeste pela região do Campo da Cidade e a Lapa, conforme mostrado … Continue lendo \"Avenida Central\""
}
>

4.1.5 – Count how many documents there are with the title Canal do Mangue

> db.pages.find( { title : "Canal do Mangue" } ).count();
5

4.1.6 – Find all documents in the pages collection with the word “Açúcar” in the title, and display its titles

> db.pages.find( { title: { $regex: /Açúcar/ } }, { title: 1 } );
{ "_id" : ObjectId("5afb15e2ee1a454de64539ef"), "title" : "Primeiras Escaladas do Pão de Açúcar" }
{ "_id" : ObjectId("5afb15e2ee1a454de6453aad"), "title" : "Caminho Aéreo do Pão de Açúcar" }
{ "_id" : ObjectId("5afb15e2ee1a454de6453ab0"), "title" : "O Pão de Açúcar" }
{ "_id" : ObjectId("5afb15e2ee1a454de6453aff"), "title" : "Pão de Açúcar" }
{ "_id" : ObjectId("5afb15e2ee1a454de6453b36"), "title" : "Caminho do Pão de Açúcar" }
{ "_id" : ObjectId("5afb15e2ee1a454de6453b85"), "title" : "Morro da Urca e Pão de Açúcar" }
{ "_id" : ObjectId("5afb15e2ee1a454de6453b87"), "title" : "Imagens da Praia Vermelha, Urca, Morro da Urca e Pão de Açúcar" }
>

4.1.7 – Find all documents in the pages collection with the word “Praça” at the beginning of its title, and display the titles

> db.pages.find( { title: { $regex: /^Praça/ } }, { title: 1 } )
{ "_id" : ObjectId("5afb15e2ee1a454de6453a49"), "title" : "Praça do Curro" }
{ "_id" : ObjectId("5afb15e2ee1a454de6453a7b"), "title" : "Praça do Capim" }
{ "_id" : ObjectId("5afb15e2ee1a454de6453af1"), "title" : "Praça Tiradentes" }
{ "_id" : ObjectId("5afb15e2ee1a454de6453af5"), "title" : "Praça do Comércio" }
{ "_id" : ObjectId("5afb15e2ee1a454de6453b97"), "title" : "Praça da República" }
{ "_id" : ObjectId("5afb15e2ee1a454de6453be3"), "title" : "Praça XV de Novembro" }
>

4.1.8 – Find all documents in the pages collection with the word “Glória” at the end of its title, and display the titles

> db.pages.find( { title: { $regex: /Glória$/ } }, { title: 1 } );
{ "_id" : ObjectId("5afb15e2ee1a454de64539c2"), "title" : "Rua Nossa Senhora da Glória" }
{ "_id" : ObjectId("5afb15e2ee1a454de64539c8"), "title" : "Santuário de Nossa Senhora da Glória" }
{ "_id" : ObjectId("5afb15e2ee1a454de64539d1"), "title" : "A Glória" }
{ "_id" : ObjectId("5afb15e2ee1a454de64539f5"), "title" : "Relógio da Glória" }
{ "_id" : ObjectId("5afb15e2ee1a454de6453a38"), "title" : "Nossa Senhora da Glória" }
{ "_id" : ObjectId("5afb15e2ee1a454de6453aeb"), "title" : "Criação da Freguesia da Glória" }
{ "_id" : ObjectId("5afb15e2ee1a454de6453b24"), "title" : "15 de agosto de 1823, Dia de Nossa Senhora da Glória" }
>

4.1.9 – Find the descendants of document Categorias, and display its titles and ancestors.

> // Find the identifier (id) of document Categorias
> db.pages.find( { title : "Categorias" }, { id: 1} );
{ "_id" : ObjectId("5afb15e2ee1a454de6453bdf"), "id" : 1459 }
> // Find the descendants of document Categorias
> db.pages.find( { ancestors :  [1459] }, { title: 1, ancestors: 1} );
{ "_id" : ObjectId("5afb15e2ee1a454de6453bc0"), "title" : "Geografia, Biografia e História", "ancestors" : [ 1459 ] }
{ "_id" : ObjectId("5afb15e2ee1a454de6453bc7"), "title" : "Viagem", "ancestors" : [ 1459 ] }
{ "_id" : ObjectId("5afb15e2ee1a454de6453bca"), "title" : "Geodésia", "ancestors" : [ 1459 ] }
{ "_id" : ObjectId("5afb15e2ee1a454de6453bce"), "title" : "Governo", "ancestors" : [ 1459 ] }
{ "_id" : ObjectId("5afb15e2ee1a454de6453be4"), "title" : "Economia", "ancestors" : [ 1459 ] }
{ "_id" : ObjectId("5afb15e2ee1a454de6453be6"), "title" : "Cidade", "ancestors" : [ 1459 ] }
{ "_id" : ObjectId("5afb15e2ee1a454de6453be8"), "title" : "Saúde e Assistência Social", "ancestors" : [ 1459 ] }
{ "_id" : ObjectId("5afb15e2ee1a454de6453bea"), "title" : "Educação e Cultura", "ancestors" : [ 1459 ] }
{ "_id" : ObjectId("5afb15e2ee1a454de6453beb"), "title" : "Religião", "ancestors" : [ 1459 ] }
{ "_id" : ObjectId("5afb15e2ee1a454de6453bef"), "title" : "Parques e Áreas Verdes", "ancestors" : [ 1459 ] }
{ "_id" : ObjectId("5afb15e2ee1a454de6453bf2"), "title" : "Transporte", "ancestors" : [ 1459 ] }
> // Find ALL the descendants of document Categorias
> db.pages.find( { ancestors : { $all: [1459] } }, { title: 1, ancestors: 1} );
{ "_id" : ObjectId("5afb15e2ee1a454de645399e"), "title" : "Serviços Públicos", "ancestors" : [ 1299, 1459 ] }
{ "_id" : ObjectId("5afb15e2ee1a454de6453a8b"), "title" : "Religiosos", "ancestors" : [ 1118, 1459 ] }
{ "_id" : ObjectId("5afb15e2ee1a454de6453b68"), "title" : "Cemitérios", "ancestors" : [ 1118, 1459 ] }
{ "_id" : ObjectId("5afb15e2ee1a454de6453b6b"), "title" : "Calendário Eclesiástico", "ancestors" : [ 1118, 1459 ] }
{ "_id" : ObjectId("5afb15e2ee1a454de6453b78"), "title" : "Largo da Carioca", "ancestors" : [ 1115, 1299, 1459 ] }
{ "_id" : ObjectId("5afb15e2ee1a454de6453b7b"), "title" : "Influências, no Barroco, da Terra e da Gente Brasileira", "ancestors" : [ 5325, 1126, 1459 ] }
{ "_id" : ObjectId("5afb15e2ee1a454de6453b7c"), "title" : "A Pseudo Degenerescência do Barroco", "ancestors" : [ 5325, 1126, 1459 ] }
{ "_id" : ObjectId("5afb15e2ee1a454de6453b7d"), "title" : "O Barroco", "ancestors" : [ 5325, 1126, 1459 ] }
{ "_id" : ObjectId("5afb15e2ee1a454de6453b7e"), "title" : "A Causalidade e o Trânsito do Barroco", "ancestors" : [ 5325, 1126, 1459 ] }
{ "_id" : ObjectId("5afb15e2ee1a454de6453b7f"), "title" : "O Barroco no Brasil", "ancestors" : [ 1126, 1459 ] }
{ "_id" : ObjectId("5afb15e2ee1a454de6453b80"), "title" : "Preliminar", "ancestors" : [ 5325, 1126, 1459 ] }
{ "_id" : ObjectId("5afb15e2ee1a454de6453b82"), "title" : "Influências de Além-Mar", "ancestors" : [ 5325, 1126, 1459 ] }
{ "_id" : ObjectId("5afb15e2ee1a454de6453b85"), "title" : "Morro da Urca e Pão de Açúcar", "ancestors" : [ 3588, 1299, 1459 ] }
{ "_id" : ObjectId("5afb15e2ee1a454de6453b86"), "title" : "Canal do Mangue", "ancestors" : [ 3588, 1299, 1459 ] }
{ "_id" : ObjectId("5afb15e2ee1a454de6453b8a"), "title" : "Chafariz de Mestre Valentim", "ancestors" : [ 4930, 1299, 1459 ] }
{ "_id" : ObjectId("5afb15e2ee1a454de6453b8b"), "title" : "Aqueduto da Carioca", "ancestors" : [ 4930, 1299, 1459 ] }
{ "_id" : ObjectId("5afb15e2ee1a454de6453b8c"), "title" : "Chafariz da Praça São Salvador", "ancestors" : [ 4930, 1299, 1459 ] }
{ "_id" : ObjectId("5afb15e2ee1a454de6453b8d"), "title" : "Aquedutos, Fontes e Chafarizes", "ancestors" : [ 1299, 1459 ] }
{ "_id" : ObjectId("5afb15e2ee1a454de6453b8e"), "title" : "Chafariz de Grandjean de Montigny", "ancestors" : [ 4930, 1299, 1459 ] }
{ "_id" : ObjectId("5afb15e2ee1a454de6453b90"), "title" : "Chafariz da Praça Quinze de Novembro", "ancestors" : [ 4930, 1299, 1459 ] }
Type "it" for more
>

4.1.10 – Find the descendants of document Categorias, and display its titles, using the forEach() method on the cursor returned by find()

> db.pages.find(
...     { title : "Categorias" }
... ).forEach(
...     function(p) {
...         print( "id: " + p.id );
...         db.pages.find(
...             { "ancestors.0":  p.id }
...         ).forEach(
...             function(q) {
...                 print( "Título: " + q.title );
...             }
...         );
...     }
... );
id: 1459
Título: Geografia, Biografia e História
Título: Viagem
Título: Geodésia
Título: Governo
Título: Economia
Título: Cidade
Título: Saúde e Assistência Social
Título: Educação e Cultura
Título: Religião
Título: Parques e Áreas Verdes
Título: Transporte
>

4. Text Search