# seneca-store-query

> Extended query for Seneca framework stores

Latest version **0.0.5** (published 2016-04-19) · MIT license · 0 weekly downloads

## Install

```sh
npm install seneca-store-query
pnpm add seneca-store-query
yarn add seneca-store-query
bun add seneca-store-query
```

## Health

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

Positive: no vulnerabilities.

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

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.0.5 |
| Published | 2016-04-19 |
| First published | 2016-03-28 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 3 |
| Known vulnerabilities | 0 (+6 in 1 direct dependencies) |
| Install scripts | no |
| GitHub stars | 3 |
| Author | Marian Radulescu |
| Maintainers | mihaidma |
| Keywords | seneca, store, query |

## Links

- npm: https://www.npmjs.com/package/seneca-store-query
- Repository: https://github.com/senecajs/seneca-store-query
- Homepage: https://github.com/senecajs/seneca-store-query#readme
- Issues: https://github.com/senecajs/seneca-store-query/issues
- npm.io page: https://npm.io/package/seneca-store-query

## Dependencies (3)

- [lodash](https://npm.io/package/lodash.md) 3.10.1
- [node-uuid](https://npm.io/package/node-uuid.md) 1.4.7
- [seneca-standard-query](https://npm.io/package/seneca-standard-query.md) 0.0.5

## Alternatives

- [gamedig](https://npm.io/package/gamedig.md) — 29.3K weekly downloads
- [join-monster](https://npm.io/package/join-monster.md) — 12.8K weekly downloads
- [masked](https://npm.io/package/masked.md) — 5.5K weekly downloads
- [@comunica/actor-query-process-explain-logical](https://npm.io/package/@comunica/actor-query-process-explain-logical.md) — 4.7K weekly downloads
- [@veracity/vui](https://npm.io/package/@veracity/vui.md) — 4.6K weekly downloads

## Recent versions

- 0.0.5 (latest) — 2016-04-19
- 0.0.3 — 2016-04-05
- 0.0.2 — 2016-03-29
- 0.0.1 — 2016-03-28

## README

![Seneca](http://senecajs.org/files/assets/seneca-logo.png)
> A [Seneca.js](http://senecajs.org) data storage plugin

seneca-store-query
=======================

[![npm version][npm-badge]][npm-url]
[![Build Status][travis-badge]][travis-url]
[![Dependency Status][david-badge]][david-url]
[![Gitter][gitter-badge]][gitter-url]

seneca-store-query is a plugin for the [Seneca][seneca] MVP toolkit that extends the query capabilites of the [seneca-standard-query][standard-query]. It currently works with [seneca-postgres-store][postgres-store] and [seneca-mysql-store][mysql-store]

```js
Usage:

    var Seneca = require('seneca')
    var si = Seneca()

    var DBConfig = {
      name: 'senecatest',
      host: 'localhost',
      username: 'senecatest',
      password: 'senecatest',
      port: 5432
    }
    ...

    si.use(require('seneca-postgres-store'), DBConfig)
    si.use(require('seneca-store-query'))
    si.ready(function() {
      var product = si.make('product')
      ...
    })
    ...
```

## Seneca extended query format

This plugin extends the basic standard store functionality with support for more complex queries.

### Comparison query operators

list$ is extended with the following comparison operators:

- ne$: `.list$({ f1: {ne$: v1} })` for not-equal. 
- eq$: `.list$({ f1: {eq$: v1} })` for equal. 
- lte$: `.list$({ f1: {lte$: 5} })` for less than or equal. 
- lt$: `.list$({ f1: {lt$: 5} })` for less than. 
- gte$: `.list$({ f1: {gte$: 5} })` for greater than or equal. 
- gt$: `.list$({ f1: {gt$: 5} })` for greater than. 
- in$: `.list$({ f1: {in$: [10, 20]} })` for in. in$ operator accepts only values of type array. 
- nin$: `.list$({ f1: {nin$: ['v1', 'v2']} })` for not-in. nin$ operator accepts only values of type array. 


Notes:
- the `sort$`, `limit$`, `skip$` and `fields$` can be used together.
- the operators described above can be used together

### Logical query operators

list$ is extended with the following logical operators:

- or$: `.list$({ or$: [{name: 'something'}, {price: 200}]})`
- and$: `.list$({ and$: [{name: 'something'}, {price: 200}]})`

Notes:
- These logical operators accepts only arrays as values.
- These operators can be used together to build more complex queries
- These logical operators can be used also with any Comparison query operators described above.

A complex example:

```js
ent.list$( 
  { 
    or$: [
      {name: 'something'}, 
      {
        and$: [
          {price: {gte$: 100}}, 
          {name: 'other'}
        ]
      }, 
      {color: { ne$: 'red' }}
    ], 
    sort$: {name: 1},
    fields$: ['name', 'color']
  }, function(err, list){
    // do something with result...
  } )
```

## Limits

By default queries are limited to 20 values. This can be bypassed by passing the `nolimit` option, which if set to true will not limit any queries.

## Fields

To filter the fields returned from the `list` operation, pass a `fields$` array of column names to return. If no `fields$` are passed, all fields are returned (i.e. `select *` is used). e.g.

    query.fields$ = ['id', 'name']


Note: The implicit id that is generated on save$ has an uuid value. To override this you must provide entity.id$ with a desired value.


## Contributing
We encourage participation. If you feel you can help in any way, be it with
examples, extra testing, or new features please get in touch.


[npm-badge]: https://img.shields.io/npm/v/seneca-store-query.svg
[npm-url]: https://npmjs.com/package/seneca-store-query
[travis-badge]: https://api.travis-ci.org/senecajs/seneca-store-query.svg
[travis-url]: https://travis-ci.org/senecajs/seneca-store-query
[david-badge]: https://david-dm.org/senecajs/seneca-store-query.svg
[david-url]: https://david-dm.org/senecajs/seneca-store-query
[gitter-badge]: https://badges.gitter.im/Join%20Chat.svg
[gitter-url]: https://gitter.im/senecajs/seneca
[seneca]: http://senecajs.org/
[postgres-store]: https://github.com/senecajs/seneca-postgres-store
[mysql-store]: https://github.com/senecajs/seneca-mysql-store
[standard-query]: https://github.com/senecajs/seneca-standard-query

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