Eu definitivamente usaria a consulta $in e forneceria uma matriz de _ids.
Exemplo:
db.collection.find({
"key": {
"$in": [
ObjectId("xxx"),
ObjectId("yyy"),
ObjectId("zzz")
]
}
})
Por quê?
- Se você fizer um loop, haverá uma certa quantidade de configuração e desmontagem para cada consulta criando e esgotando os cursores que criariam sobrecarga.
- Se você não estiver fazendo isso em uma máquina local, também criará sobrecarga de tcp/ip para cada solicitação. Localmente, você pode usar soquetes de domínio.
- Há um índice em "_id" criado por padrão e a coleta de um grupo de documentos para retornar em uma solicitação em lote deve ser extremamente rápida, portanto não há necessidade de dividir isso em consultas menores.
Há alguma documentação adicional aqui se você quiser dar uma olhada.