Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
86 changes: 31 additions & 55 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,9 @@
![Logo](https://user-images.githubusercontent.com/15038724/94977866-9e915c80-04cf-11eb-9f4f-fd3bcf5c8a54.png)

# FireFerret

Autocaching query client for MongoDB, with powerful filtering functionality.

_We care about response times!_
![Logo](https://user-images.githubusercontent.com/15038724/94977866-9e915c80-04cf-11eb-9f4f-fd3bcf5c8a54.png)

[![License: MIT](https://img.shields.io/badge/license-MIT-blue)](https://opensource.org/licenses/MIT)
[![JavaScript Style Guide: Standard](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com/ "JavaScript Standard Style")
[![Build Status](https://travis-ci.com/mster/fireferret.svg?branch=master)](https://travis-ci.com/mster/fireferret)
[![Coverage Status](https://coveralls.io/repos/github/mster/fireferret/badge.svg?branch=master)](https://coveralls.io/github/mster/fireferret?branch=master)
# FireFerret [![License: MIT](https://img.shields.io/badge/license-MIT-blue)](https://opensource.org/licenses/MIT) [![JavaScript Style Guide: Standard](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com/ "JavaScript Standard Style") [![Build Status](https://travis-ci.com/mster/fireferret.svg?branch=master)](https://travis-ci.com/mster/fireferret) [![Coverage Status](https://coveralls.io/repos/github/mster/fireferret/badge.svg?branch=master)](https://coveralls.io/github/mster/fireferret?branch=master)

[![NPM](https://nodei.co/npm/fireferret.png)](https://nodei.co/npm/fireferret/)
_Node.js Read-through cache for MongoDB_.

## References

Expand All @@ -23,68 +15,52 @@ _We care about response times!_
| MongoDB | [https://www.mongodb.com/](https://www.mongodb.com/) |
| Redis | [https://redis.io/](https://redis.io/) |

## Requirements

FireFerret requires MongoDB and Redis instances.

## Usage

Configure a FireFerret client by suppling a datastore and MongoDB connection information.

To learn how to configure a datastore, see the [Datastores](#Datastores) section.

```js
const FireFerret = require("fireferret");
const FireFerretClient = require("fireferret");

const cacheConfig = {
store: require('cache-manager-redis-store'),
host: 'localhost',
port: 6379,
...
}

const ferret = new FireFerret({
mongo: { uri: "...", collectionName: "..." },
redis: { host: "...", port: 6379, auth_pass: "..." },
});
const ferret = new FireFerretClient({
uri: "mongodb://endpoint:27017/?compressors=zlib",
collection: "DefaultCollection",
...cacheConfig
})

await ferret.connect();

const docs = await ferret.fetch({ "some.field": /.*/ });
```

Query some documents using pagination.

```js
const docs = await ferret.fetch(
{ genre: { $in: ["Djent", "Math Metal"] } },
{ pagination: { page: 3, size: 20 } }
);
```
const query = { genre: { $in: ["Djent", "Tech Death"] } };

FireFerret supports streaming queries.
const pageOne = await ferret.fetch(
query,
{ pg: [1, 20] }
);

```js
await ferret.fetch({ isOpen: true }, { stream: true }).pipe(res);
const pageTwo = await ferret.fetch(
query,
{ pg: [2, 20] }
);
```

Using the Wide-Match strategy.
## Datastores

```js
const smartFerret = new FireFerret({
/* ... ,*/
wideMatch: true,
});
await smartFerret.connect();

const query = { candidates: { $ne: "Drumpf", $exists: true } };

/* cache miss */
const first50docs = await smartFerret.fetch(query, {
pagination: { page: 1, size: 50 },
});

/* cache hit */
const first20docs = await smartFerret.fetch(query, {
pagination: { page: 1, size: 20 },
});

/* cache hit */
const first10docs = await smartFerret.fetch(query, {
pagination: { page: 1, size: 10 },
});

/* cache hit */
const firstDoc = await smartFerret.fetchOne(query);
```

## Contributing

Expand Down
2 changes: 1 addition & 1 deletion docs/scripts/jaguar.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions docs/scripts/prettify/lang-css.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading