0.1.60 • Published 6 months ago

@x-query-adapter/mongo v0.1.60

Weekly downloads
95
License
MIT
Repository
-
Last release
6 months ago

BETA @x-query-adapter/mongo

Installation

npm i @x-query-adapter/mongo

Query syntax

See : https://github.com/x-query/x-query

Examples

Create new adapter for a mongoose schema

  • Schema
const OrderSchema = new Schema({
  shop_id: { type: Number },
  id: { type: Number },
  customer: {
    id: { type: Number },
    name: { type: String },
    phone: { type: String },
  },
  line_items: [{
    id: { type: Number },
    barcode: { type: String },
    quantity: { type: Number },
    type: { type: String },
    vendor: { type: String },
    price: { type: Number }
  }],
  total_prices: { type: Number },
  created_at: { type: Date },
  updated_at: { type: Date },
  status: { type: String },
  order_number: { type: String },
  location_id: { type: Number },
  fulfillment_status: { type: String },
  is_deleted: { type: Boolean },
  tags: [String]
});
  • Adapter
const { XQueryMongoAdapter } = require('@x-query-adapter/mongo');

const xQueryAdapter = new XQueryMongoAdapter({
  schema: OrderSchema,
  required_keys: ['shop_id'],
  maxLimit: 1000,
  defaults: {
    page: 1,
    limit: 20,
    sort: 'created_at_asc',
    is_deleted: false
  },
  skippedValues: ['', null, undefined],
  alias: {
    barcode: 'line_items.barcode'
  },
});

Use adapter to parse query

let query = {
  'shop_id'            : '100000001',
  'created_at_gte'     : '2019-04-01T03:15:00.000Z',
  'created_at_lte'     : '2019-04-30T03:15:00.000Z',
  'customer.name_like' : 'hoang',
  'barcode'            : 'HEO',
  'status_in'          : 'NEW,ASSIGN_EMPLOYEE',
  'page'               : '2', 
  'limit'              : '20',
  'sort'               : 'created_at_asc,id_desc',
  'fields'             : 'id,customer,line_items',
};

const parse_query_result = xQueryAdapter.parse(query);

assert.deepEqual(parse_query_result, {
  "errors": null,
  "filter": {
    "is_deleted": { "$eq": false },
    "shop_id": { "$eq": 100000001 },
    "created_at": {
      "$gte": "2019-04-01T03:15:00.000Z",
      "$lte": "2019-04-30T03:15:00.000Z"
    },
    "updated_at": {
      "$gte": "2019-03-31T17:00:00.000Z",
      "$lte": "2019-04-30T16:59:59.999Z"
    },
    "customer.name": { "$regex": /hoang/gi },
    "line_items.barcode": { "$eq": "HEO" },
    "status": { "$in": ["NEW", "ASSIGN_EMPLOYEE"]
    }
  },
  "page": 2,
  "skip": 20,
  "limit": 20,
  "sort": {
    "created_at": 1,
    "id": -1
  },
  "fields": {
    "id": 1,
    "customer": 1,
    "line_items": 1,
  },
});

Simple function search with query

const xQueryAdapter = new XQueryMongoAdapter({
  schema: OrderSchema,
  required_keys: ['shop_id'],
  maxLimit: 1000,
  defaults: {
    page: 1,
    limit: 20,
    sort: 'created_at_asc',
    is_deleted: false
  },
  skippedValues: ['', null, undefined],
  alias: {
    barcode: 'line_items.barcode'
  },
  throwError: true // to throw error
});

async function searchOrders({ query }) {
  const { filter, fields, skip, limit, sort } = xQueryAdapter.parse(query);
  
  const result = { total: 0, items: [] };
  
  const total = await OrderModel.count(filter);
  
  if (total > 0) {
    result.total = total;
  
    result.items = await OrderModel.find(filter, fields).skip(skip).limit(limit).sort(sort).lean(true);
  }
  
  return result;
}
0.1.58

9 months ago

0.1.59

8 months ago

0.1.60

6 months ago

0.1.54

2 years ago

0.1.55

2 years ago

0.1.56

2 years ago

0.1.57

2 years ago

0.1.52

2 years ago

0.1.53

2 years ago

0.1.50

3 years ago

0.1.49

3 years ago

0.1.47

4 years ago

0.1.46

4 years ago

0.1.40

4 years ago

0.1.39

4 years ago

0.1.38

4 years ago

0.1.37

5 years ago

0.1.36

5 years ago

0.1.35

5 years ago

0.1.33

5 years ago

0.1.32

5 years ago

0.1.31

5 years ago

0.1.27

5 years ago

0.1.23

5 years ago

0.1.21

5 years ago

0.1.20

5 years ago

0.1.19

5 years ago

0.1.17

5 years ago

0.1.16

5 years ago

0.1.15

5 years ago

0.1.14

5 years ago

0.1.13

5 years ago

0.1.12

5 years ago

0.1.9

5 years ago

0.1.8

5 years ago

0.1.7

5 years ago

0.1.6

5 years ago

0.1.5

5 years ago

0.1.3

5 years ago

0.1.2

5 years ago

0.1.0

5 years ago

0.0.9

5 years ago

0.0.8

5 years ago

0.0.7

5 years ago

0.0.6

5 years ago

0.0.5

5 years ago