MongoDB – Insert/Find – Criando e selecionando documentos
- Postado por Adriano Bonacin
- Categorias mongodb
- Data 13/01/2022
- Comentários 0 comentário
Vamos descobrir como funcionam as queries e outras funções? No último artigo conversamos sobre as estruturas lógicas e como inserimos um documento que desencadeou a criação da collection e database. Agora detalharemos os procedimentos para criar e selecionar documentos, usando os métodos derivados de insert e find.
Vou usar a API do MongoDB 5.0. Para nosso bem, ela não é muito diferente das anteriores. Antes de olhar para a query, através da função find, vamos explorar um pouco mais o insert. Já o utilizamos uma vez:
yadax> db.clientes.insertOne({'nome': 'Adriano Bonacin'})
{
acknowledged: true,
insertedId: ObjectId("61d72fc5222d2ee4efa32ed9")
}
yadax>
Criando alguns documentos
Também há uma opção para inserir muitos docs de uma vez. Vou utilizar este caso para explorar as queries.
yadax> db.cars.insertMany([
... {"marca":"HONDA", "modelo":"CIVIC", "ano_fabricacao": 2015 , "ano_modelo": 2016, "cor": "Prata", "preco": 60000},
... {"marca":"HONDA", "modelo":"Civic", "ano_fabricacao": 2018 , "ano_modelo": 2018, "cor": "Branco", "preco": 80000},
... {"marca":"HONDA", "modelo":"FIT", "ano_fabricacao": 2019 , "ano_modelo": 2019, "cor": "Branco", "preco": 50000},
... {"marca":"FIAT", "modelo":"UNO", "ano_fabricacao": 2000 , "ano_modelo": 2001, "cor": "Preto", "preco": 10000},
... {"marca":"FIAT", "modelo":"PALIO", "ano_fabricacao": 2006 , "ano_modelo": 2007, "cor": "Prata", "preco": 11000},
... {"marca":"FIAT", "modelo":"STRADA", "ano_fabricacao": 2018 , "ano_modelo": 2018, "cor": "Branco", "preco": 40000},
... {"marca":"FIAT", "modelo":"TORO", "ano_fabricacao": 2020 , "ano_modelo": 2020, "cor": "Preto", "preco": 90000},
... {"marca":"FIAT", "modelo":"TORO", "ano_fabricacao": 2019 , "ano_modelo": 2020, "cor": "Prata", "preco": 80000},
... {"marca":"VW", "modelo":"GOL", "ano_fabricacao": 2012 , "ano_modelo": 2012, "cor": "Preto", "preco": 20000},
... {"marca":"VW", "modelo":"POLO", "ano_fabricacao": 2020 , "ano_modelo": 2020, "cor": "Branco", "preco": 60000},
... {"marca":"VW", "modelo":"GOLF", "ano_fabricacao": 2019 , "ano_modelo": 2019, "cor": "Prata", "preco": 90000},
... {"marca":"VW", "modelo":"GOL", "ano_fabricacao": 2003 , "ano_modelo": 2003, "cor": "Branco", "preco": 10000},
... {"marca":"FORD", "modelo":"FIESTA", "ano_fabricacao": 2005 , "ano_modelo": 2006, "cor": "Prata", "preco": 11000},
... {"marca":"FORD", "modelo":"FIESTA", "ano_fabricacao": 2007 , "ano_modelo": 2007, "cor": "Prata"},
... {"marca":"FORD", "modelo":"PAMPA", "ano_fabricacao": 1989, "ano_modelo": 1989, "cor": "Prata", "preco": null}
... ])
{
acknowledged: true,
insertedIds: {
'0': ObjectId("61d76829222d2ee4efa32edc"),
'1': ObjectId("61d76829222d2ee4efa32edd"),
'2': ObjectId("61d76829222d2ee4efa32ede"),
'3': ObjectId("61d76829222d2ee4efa32edf"),
'4': ObjectId("61d76829222d2ee4efa32ee0"),
'5': ObjectId("61d76829222d2ee4efa32ee1"),
'6': ObjectId("61d76829222d2ee4efa32ee2"),
'7': ObjectId("61d76829222d2ee4efa32ee3"),
'8': ObjectId("61d76829222d2ee4efa32ee4"),
'9': ObjectId("61d76829222d2ee4efa32ee5"),
'10': ObjectId("61d76829222d2ee4efa32ee6"),
'11': ObjectId("61d76829222d2ee4efa32ee7"),
'12': ObjectId("61d76829222d2ee4efa32ee8"),
'13': ObjectId("61d76829222d2ee4efa32ee9"),
'14': ObjectId("61d76829222d2ee4efa32eea")
}
}
yadax>
Como você já deve esperar, mais uma collection foi criado automaticamente. É possível listar as collections usando:
yadax> show collections
cars
clientes
yadax>
Funções - Métodos
Agora que temos nossa collection de carros, vamos brincar com as queries. O caso mais simples é fazer a query sem filtro e selecionando todas as colunas. O tradicional “select * from table”, é feito com a função find. A forma como utilizamos é “db”.”collection”.”funcao”. Um truque para saber quais são as funções disponíveis é utilizar o autocomplete do mongosh. Ao digitar db.cars. + TAB + TAB, o mongosh vai listar todas as funções que estão disponíveis no seu contexto. Rigorosamente falando, deveríamos chamar estas “funções” de “métodos”, mas talvez meu público não ficará incomodado com isso 🙂. Veja como fica:
yadax> db.cars.
db.cars.__proto__ db.cars.constructor ...
db.cars.toLocaleString db.cars.toString ...
db.cars.countDocuments db.cars.deleteMany ...
db.cars.find db.cars.findOne ...
db.cars.findOneAndUpdate db.cars.insertMany ...
Muitas, certo? Se quiser apenas as que começam com find, é só usar o TAB + TAB depois do find:
yadax> db.cars.find
db.cars.find db.cars.findOne db.cars.findOneAndDelete ...
Ao final da função, você deve utilizar parênteses e informar os parâmetros quando for necessário.
Finalmente:
yadax> db.cars.find()
[
{
_id: ObjectId("61d76829222d2ee4efa32edc"),
marca: 'HONDA',
modelo: 'CIVIC',
ano_fabricacao: 2015,
ano_modelo: 2016,
cor: 'Prata',
preco: 60000
},
{
_id: ObjectId("61d76829222d2ee4efa32edd"),
marca: 'HONDA',
modelo: 'Civic',
ano_fabricacao: 2018,
ano_modelo: 2018,
cor: 'Branco',
preco: 80000
},
...
]
Uma coisa importante a se notar é que tanto o retorno do find() quanto o parâmetro que passamos no insertMany tem a seguinte estrutura:
[
{doc1},
{doc2},
...,
{doc3}
]
Mais a frente vamos ver que este tipo de estrutura nos permite iterar (loop) nos elementos.
Tag:mongodb