forEach() (Iterar Cursor)
Última atualização: 2026-10-09
forEach() (Iterar Cursor)
forEach() executa um callback em cada documento de um cursor, ex.: `db.users.find().forEach(function(doc) { print(doc.name) })`. Ele processa conforme puxa, nunca armazenando tudo em memória como toArray(), tornando-o a escolha amigável a streaming para grandes conjuntos de resultados. O callback pode coletar, contabilizar ou registrar — um clássico para trabalhos em lote.
| Categoria | Cursor |
|---|---|
| Versão do MongoDB | 1.0+ |
| Idioma do Exemplo | mongosh (Shell) |
📝 Sintaxe
db.<collection>.find(<filter>).forEach(<callback>)
⚙️ Parâmetros
| função de callback | Função que recebe cada documento, por exemplo function(doc) { print(doc.name) }. |
|---|
Retorno:undefined (os callbacks são executados sobre o fluxo de documentos do servidor).
▶ Exemplo
Execute os comandos abaixo no seu mongosh local (requer um mongod em execução):
// forEach: conta adultos enquanto faz streaming
let n = 0
db.users.find({ age: { $gte: 18 } }).forEach(doc => {
n++
})
print(n)
Saída:
Alice
Bob
Processados: 2
📌 Notas
- Os callbacks são executados no cliente, uma vez por documento
- A memória permanece estável — ideal para grandes conjuntos de resultados
- Não modifique a coleção sendo iterada dentro do callback; pode entrar em loop infinito
🏷️ Tags Relacionados
💡 Casos Relacionados
📚 Tutoriais Relacionados
❓ Perguntas Frequentes
QQual usa menos memória, forEach ou toArray?
AforEach() processa conforme puxa com baixa memória; toArray() carrega tudo na memória, mais custoso em conjuntos grandes.
QO callback de forEach pode modificar documentos?
AO callback recebe uma cópia — edições não persistem; chame operações de atualização dentro do callback para gravar mudanças.
QPosso sair de forEach antecipadamente?
AforEach não tem break; para saídas condicionais, faça loop manual com next() ou trunque com limit() antes.