0.1.62 • Published 1 year ago
@x-query-adapter/mongo v0.1.62
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.62
1 year ago
0.1.61
1 year ago
0.1.58
2 years ago
0.1.59
2 years ago
0.1.60
2 years ago
0.1.54
4 years ago
0.1.55
3 years ago
0.1.56
3 years ago
0.1.57
3 years ago
0.1.52
4 years ago
0.1.53
4 years ago
0.1.50
4 years ago
0.1.49
4 years ago
0.1.47
5 years ago
0.1.46
5 years ago
0.1.40
5 years ago
0.1.39
5 years ago
0.1.38
6 years ago
0.1.37
6 years ago
0.1.36
6 years ago
0.1.35
6 years ago
0.1.33
6 years ago
0.1.32
6 years ago
0.1.31
6 years ago
0.1.27
6 years ago
0.1.23
6 years ago
0.1.21
6 years ago
0.1.20
6 years ago
0.1.19
6 years ago
0.1.17
6 years ago
0.1.16
6 years ago
0.1.15
6 years ago
0.1.14
6 years ago
0.1.13
6 years ago
0.1.12
6 years ago
0.1.9
6 years ago
0.1.8
6 years ago
0.1.7
6 years ago
0.1.6
6 years ago
0.1.5
6 years ago
0.1.3
6 years ago
0.1.2
6 years ago
0.1.0
6 years ago
0.0.9
6 years ago
0.0.8
6 years ago
0.0.7
6 years ago
0.0.6
6 years ago
0.0.5
6 years ago