Created
January 19, 2017 18:27
-
-
Save higordiego/cdedc5579849f3673ba6aeefaf08c214 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
## findAndModify | |
Lembrando da aula anterior quando falei que a busca com `findOne` retorna um cursor onde você deve iterar nele para buscar seus dados, hoje veremos a diferença dele para o `findAndModify`. | |
FindAndModify() modifica e retorna um único documento com no campo chave de seleção inseridos. Nessa busca o documento não retorna o conteúdo atualizado por padrão caso o campo chave não exista no banco de dados um novo registro é inserido e se o upsert seja definido como true. | |
Esquema do findAndModify(): | |
``` | |
db.collection.findAndModify({ | |
query: <document>, | |
sort: <document>, | |
new: <boolean>, | |
fields: <document>, | |
upsert: <boolean> | |
}) | |
``` | |
Então como funciona ? | |
query: Campo determinado para a busca, aquele documento especifico que queremos modificar. | |
sort: Ordena o resultado em forma crescente ou decrescente. | |
fields : Especifica o conjunto de campos a serem mostrados. | |
new: Indica se o documento modificado será exibido. | |
upsert: Cria um novo documento, se o campo chave da busca não for encontrado. | |
### Query | |
``` | |
var Query = {name: 'Squirtle'} | |
``` | |
Isso significa que iremos pesquisar apenas os Pokemons com o `name` igual a `Squirtle`. | |
Esse nosso objeto de `Query` tem a mesma funcionalidade do tão conhecido `SELECT` dos bancos relacionais. | |
### Adicionando dados | |
Buscando os dados contido no documento pokemon. | |
``` | |
db.pokemons.find(); | |
{ | |
"_id": ObjectId("5880fbb190b829185531c387"), | |
"name": "Bulbassauro", | |
"description": "Chicote de trepadeira", | |
"type": "grama", | |
"attack": 49, | |
"height": 0.4 | |
} | |
{ | |
"_id": ObjectId("5880fbb190b829185531c388"), | |
"name": "Charmander", | |
"description": "Esse é o cão chupando manga de fofinho", | |
"type": "fogo", | |
"attack": 52, | |
"height": 0.6 | |
} | |
{ | |
"_id": ObjectId("5880fbb190b829185531c389"), | |
"name": "Squirtle", | |
"description": "Ejeta água que passarinho não bebe", | |
"type": "água", | |
"attack": 48, | |
"height": 0.5 | |
} | |
Fetched 3 record(s) in 2ms | |
``` | |
"Gostaria de acrescentar + 20 no campo 'attack', como seria com o findAndModify?" | |
``` | |
var Query = {name: 'Squirtle'} | |
db.pokemons.findAndModify({ | |
query: Query, | |
update: {$inc: {attack: 20}} | |
}); | |
``` | |
Resultado: | |
``` | |
db.pokemons.findAndModify({query: Query,update: {$inc: {attack: 20}} }); | |
{ | |
"_id": ObjectId("5880fbb190b829185531c389"), | |
"name": "Squirtle", | |
"description": "Ejeta água que passarinho não bebe", | |
"type": "água", | |
"attack": 48, | |
"height": 0.5 | |
} | |
``` | |
Ouxe, agora não entendi foi nada. :\ | |
Calma, vamos explicar. | |
No campo query estamos buscando pelo o `name` contido no documento no meu caso o `Squirtle`, no campo update estou entrando com o JSON informando que quero implementar + 20 na `attack` usando $inc. | |
Verificando se o documento foi alterado. | |
``` | |
db.pokemons.findOne(Query); | |
{ | |
"_id": ObjectId("588100ad90b829185531c38f"), | |
"name": "Squirtle", | |
"description": "Ejeta água que passarinho não bebe", | |
"type": "água", | |
"attack": 68, | |
"height": 0.5 | |
} | |
``` | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment