# mongo-fetcher

> A helper that allows fetching data concurrently from mongodb

Latest version **1.0.0** (published 2019-06-12) · ISC license · 0 weekly downloads

## Install

```sh
npm install mongo-fetcher
pnpm add mongo-fetcher
yarn add mongo-fetcher
bun add mongo-fetcher
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.0 |
| Published | 2019-06-12 |
| First published | 2019-06-12 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 9 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Maintainers | payfit-tech |

## Links

- npm: https://www.npmjs.com/package/mongo-fetcher
- npm.io page: https://npm.io/package/mongo-fetcher

## Recent versions

- 1.0.0 (latest) — 2019-06-12

## README

# MongoFetcher

It exposes a function `mongoForeach()` which, given a collection and a query, will perform an async task for every document matching the query.
For example, let's assume we want to remove all our archives in a S3 bucket, which are referenced in mongo.

Our `File` collection contains documents which look like this :
```js
{
  documentType: string,
  name: string,
  ... [other fields]
}
```

We could use our `mongoForeach` to upload them with a high throughput :
```js
  const { mongoForeach } = require('@payfit/mongo-fetcher')
  const db = require('./db') // here we assume that ./db exposes a valid mongodb connection
  const s3service = require('./s3service')

  await mongoForeach(
    db.collection('File'),
    { documentType: 'archive' }, // we want only archives
    async file => { // we can use our db document and do any task we want with it
      try {
        await s3service.deleteFile(file.name)
        await db.collection('File').removeOne({ _id: file._id })
      } catch (err) {
        // handle error
      }
    },
    {
      batchSize: 150, // we fetch items from mongo 150 by 150
      concurrency: 20, // we want to have maximum 20 promises running in parallel that process the task
    }
  )

```

---
_Source: https://npm.io/package/mongo-fetcher · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
