Advertisement
Guest User

Untitled

a guest
Jan 19th, 2017
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.93 KB | None | 0 0
  1. ## findAndModify
  2.  
  3. 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`.
  4.  
  5.  
  6. 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.
  7.  
  8. Esquema do findAndModify():
  9.  
  10. ```
  11. db.collection.findAndModify({
  12. query: <document>,
  13. sort: <document>,
  14. new: <boolean>,
  15. fields: <document>,
  16. upsert: <boolean>
  17. })
  18.  
  19. ```
  20.  
  21. Então como funciona ?
  22.  
  23. query: Campo determinado para a busca, aquele documento especifico que queremos modificar.
  24. sort: Ordena o resultado em forma crescente ou decrescente.
  25. fields : Especifica o conjunto de campos a serem mostrados.
  26. new: Indica se o documento modificado será exibido.
  27. upsert: Cria um novo documento, se o campo chave da busca não for encontrado.
  28.  
  29.  
  30. ### Query
  31.  
  32. ```
  33. var Query = {name: 'Squirtle'}
  34.  
  35. ```
  36. Isso significa que iremos pesquisar apenas os Pokemons com o `name` igual a `Squirtle`.
  37.  
  38. Esse nosso objeto de `Query` tem a mesma funcionalidade do tão conhecido `SELECT` dos bancos relacionais.
  39.  
  40. ### Adicionando dados
  41.  
  42. Buscando os dados contido no documento pokemon.
  43.  
  44. ```
  45. db.pokemons.find();
  46.  
  47. {
  48. "_id": ObjectId("5880fbb190b829185531c387"),
  49. "name": "Bulbassauro",
  50. "description": "Chicote de trepadeira",
  51. "type": "grama",
  52. "attack": 49,
  53. "height": 0.4
  54. }
  55. {
  56. "_id": ObjectId("5880fbb190b829185531c388"),
  57. "name": "Charmander",
  58. "description": "Esse é o cão chupando manga de fofinho",
  59. "type": "fogo",
  60. "attack": 52,
  61. "height": 0.6
  62. }
  63. {
  64. "_id": ObjectId("5880fbb190b829185531c389"),
  65. "name": "Squirtle",
  66. "description": "Ejeta água que passarinho não bebe",
  67. "type": "água",
  68. "attack": 48,
  69. "height": 0.5
  70. }
  71. Fetched 3 record(s) in 2ms
  72.  
  73. ```
  74.  
  75. "Gostaria de acrescentar + 20 no campo 'attack', como seria com o findAndModify?"
  76.  
  77. ```
  78. var Query = {name: 'Squirtle'}
  79.  
  80. db.pokemons.findAndModify({
  81. query: Query,
  82. update: {$inc: {attack: 20}}
  83. });
  84.  
  85. ```
  86.  
  87. Resultado:
  88.  
  89. ```
  90. db.pokemons.findAndModify({query: Query,update: {$inc: {attack: 20}} });
  91. {
  92. "_id": ObjectId("5880fbb190b829185531c389"),
  93. "name": "Squirtle",
  94. "description": "Ejeta água que passarinho não bebe",
  95. "type": "água",
  96. "attack": 48,
  97. "height": 0.5
  98. }
  99.  
  100. ```
  101. Ouxe, agora não entendi foi nada. :\
  102.  
  103. Calma, vamos explicar.
  104.  
  105. 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.
  106.  
  107. Verificando se o documento foi alterado.
  108.  
  109. ```
  110.  
  111. db.pokemons.findOne(Query);
  112. {
  113. "_id": ObjectId("588100ad90b829185531c38f"),
  114. "name": "Squirtle",
  115. "description": "Ejeta água que passarinho não bebe",
  116. "type": "água",
  117. "attack": 68,
  118. "height": 0.5
  119. }
  120.  
  121. ```
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement