Skip to content

greguz/mql-match

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

mql-match

NPM Version NPM Dependency status NPM Downloads GitHub last commit

This project is a MQL (MongoDB Query Language) compiler. Filter, Update, and Aggregation queries are supported. See the support table table for more info.

Why

This project can be useful to mock some basic functionality of MongoDB's driver or simply using its query syntax for object matching.

Compatibility

The project is written in TypeScript, and targets ES2023.

This is a pure ESM package.

Example

import { ObjectId } from 'bson' // or 'mongodb'
import {
  compileExpression,
  compileMatch,
  compilePipeline,
  compileUpdate,
} from 'mql-match'

const documents = [
  {
    _id: new ObjectId('507f1f77bcf86cd799439011'),
    value: 130,
  },
  {
    _id: new ObjectId('507f191e810c19729de860ea'),
    value: 42,
  },
]

const match = compileMatch({
  _id: new ObjectId('507f1f77bcf86cd799439011'),
})

// logs { _id: new ObjectId("507f1f77bcf86cd799439011"), value: 130 }
console.log(documents.find(match))

const update = compileUpdate({
  $set: {
    my: 'Pleasure',
  },
})

const oldObject = { _id: 'my_doc' }
update(oldObject)
// logs { _id: 'my_doc', my: 'Pleasure' }
console.log(oldObject)

const map = compileExpression({
  _id: 0,
  item: 1,
  discount: {
    $cond: {
      if: { $gte: ['$qty', 250] },
      then: 30,
      else: 20,
    },
  },
})

// logs { item: 'xyz1', discount: 30 }
console.log(map({ _id: 3, item: 'xyz1', qty: 250 }))

// Returns a function that accepts an iterable (both sync or async) and returns an async iterable
const aggregate = compilePipeline([
  {
    $match: {
      value: 42,
    },
  },
])

// logs [{ _id: new ObjectId("507f191e810c19729de860ea"), value: 42 }]
console.log(aggregate(documents))

Supported features

Array

Bitwise

Comparison

Data Type

Geospatial

Logical

Miscellaneous

Array

Modifiers

Bitwise

Fields

  • $$NOW
  • $$CLUSTER_TIME
  • $$ROOT
  • $$CURRENT
  • $$REMOVE
  • $$DESCEND
  • $$PRUNE

Operators not listed here are currently not supported. Feel free to open an GitHub Issue if you need something in particular.

Arithmetic Expression Operators

Array Expression Operators

Boolean Expression Operators

Comparison Expression Operators

Conditional Expression Operators

Custom Aggregation Expression Operators

Data Size Operators

Date Expression Operators

Expressions Associated with Accumulators

Literal Expression Operator

Miscellaneous Operators

Object Expression Operators

Set Expression Operators

String Expression Operators

Text Expression Operator

Timestamp Expression Operators

Trigonometry Expression Operators

Type Expression Operators

Support

If this library helps you in your organization, you can show some love by giving the repo a star or support by making a nominal monetary contribution.

"Buy Me A Coffee"

About

A MongoDB Query Language compiler.

Topics

Resources

License

Stars

Watchers

Forks