mql-match

MongoDB Query Language match function compiler

Usage no npm install needed!

<script type="module">
  import mqlMatch from 'https://cdn.skypack.dev/mql-match';
</script>

README

mql-match

npm version Dependencies Status

This project compiles a valid MQL (MongoDB Query Language) query to a native JavaScript matching function. It uses code generation technics to improve matching performance.

Why

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

Operators support

Currently, not all operators are supported. Future updates will bring support for more operators.

Comparison

  • $eq
  • $gt Numbers, dates, and strings only.
  • $gte Numbers, dates, and strings only.
  • $in
  • $lt Numbers, dates, and strings only.
  • $lte Numbers, dates, and strings only.
  • $ne
  • $nin

Logical

  • $and
  • $not
  • $nor
  • $or

Element

  • $exists
  • $type Types "binData", "dbPointer", "javascript", "javascriptWithScope", "timestamp", "minKey", and "maxKey" are not supported.

Evaluation

  • $expr
  • $jsonSchema
  • $mod
  • $regex
  • $text
  • $where

Geospatial

  • $geoIntersects
  • $geoWithin
  • $near
  • $nearSphere

Array

  • $all
  • $elemMatch
  • $size

Bitwise

  • $bitsAllClear
  • $bitsAllSet
  • $bitsAnyClear
  • $bitsAnySet

Projection

  • $
  • $elemMatch
  • $meta
  • $slice

Miscellaneous

  • $comment Stub.
  • $rand

Example

import { ObjectId } from 'mongodb'
import { compile } from 'mql-match'

const match = compile({
  value: {
    $in: [42, 130]
  }
})

const documents = [
  {
    _id: new ObjectId(),
    value: 130
  },
  {
    _id: new ObjectId(),
    value: 0
  },
  {
    _id: new ObjectId(),
    value: 42
  }
]

for (const document of documents) {
  if (match(document)) {
    console.log(document._id) // will log 2 documents
  }
}