JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 4
  • Score
    100M100P100Q51173F
  • License ISC

Package Exports

  • mongoqueryresolver

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (mongoqueryresolver) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

Mongo Query Resolver

Build Status

MongoQueryResolver is an open-source library which makes querying and formating MongoDB databases easy. It runs on top of mongodb find function and can

  • Include related models. (BelongsTo | HasOne | HasMany | HasAndBelongsToMany | ReferencesMany)
  • Do nested queries with infinite recursion
  • Formating

Dependencies

  • [Lodash] - A modern JavaScript utility library.
  • [MongoDB] - A general purpose, document-based, distributed database.

Installation

MongoQueryResolver requires Node.js v10+ to run.

$ npm i mongoqueryresolver -s

Usage

Let's assume we have few collections:

Author: { firstName, lastName, _id, age, phone,  email }
Book: { title, description, _id, rating, storeId,  publishedDate }
AuthorBook: { authorId, bookId, _id }
Store: { name, adrress, _id, zipcode, }
Tag: { name, authorIds, _id }

Basic Example

const MQR = require('mongoqueryresolver');

(async function () {
    const db = await MQR.init("mongodb://localhost:27017/testdb");
    const authors = await MQR.filter({
        collection: "Author",
        limit: 3,
        where: {
            age: { $gt: 18 }
        },
        fields: [
            "firstName",
            {
                field: "Age",
                value: "age"
            }
        ]
    });
    console.log(authors);
})();

Output

[
  {
    "firstName": "Sylvester",
    "Age": 82
  },
  {
    "firstName": "Kenny",
    "Age": 72
  },
  {
    "firstName": "Emerson",
    "Age": 20
  }
]

More realistic Example

const MQR = require('mongoqueryresolver');

(async function(){
    const db = await MQR.init("mongodb://localhost:27017/testdb");
    let authors = await MQR.filter({
        collection: "Author",
        limit: 2,
        skip:20,
        sort:{
            firstName:1
        }
        fields: [
            "_id",
            "firstName",
            "lastName",
            "age",
            "phone",
            "email",
            {
                field: "type",
                value: "Author",
                resolve: false
            },
            {
                field: "stores",
                value: "books.$.store",
                makeUnique: true,
                uniqBy: "name"
            },
            {
                field: "books",
                value: "books.$.title"
            }
        ],
        include: {
            books: {
                relation: "hasAndBelongsToMany",
                collection: "Book",
                foreignKey: "authorId",
                relationKey: "bookId",
                through: "AuthorBook",
                scope: {
                    include: {
                        store: {
                            relation: "belongsTo",
                            collection: "Store",
                            foreignKey: "storeId",
                            scope: {
                                fields: [
                                    "name",
                                    {
                                        field: "Street Address",
                                        value: "address"
                                    }
                                ]
                            }
                        }
                    }
                }
            }
        }
    });
    console.log(authors);
})();

Output

[
  {
    "_id": 16,
    "firstName": "Aiden",
    "lastName": "Lebsack",
    "age": 32,
    "phone": "1-913-163-0599",
    "email": "Lester15@yahoo.com",
    "type": "Author",
    "stores": [
      {
        "name": "Purdy Inc",
        "Street Address": "97735 Klein Plain"
      },
      {
        "name": "Boyle, Wintheiser and Runte",
        "Street Address": "8992 Rosalia Trail"
      },
      {
        "name": "Considine and Sons",
        "Street Address": "0716 Crist Dam"
      }
    ],
    "books": [
      "Internal Paradigm Administrator",
      "Direct Marketing Analyst",
      "Forward Optimization Orchestrator"
    ]
  },
  {
    "_id": 304,
    "firstName": "Aiden",
    "lastName": "Muller",
    "age": 59,
    "phone": "1-889-908-6466",
    "email": "Santino71@gmail.com",
    "type": "Author",
    "stores": [
      {
        "name": "O'Reilly - Leannon",
        "Street Address": "154 MacGyver Crossing"
      },
      {
        "name": "Gutmann, Weissnat and Heidenreich",
        "Street Address": "138 Brennon Shores"
      },
      {
        "name": "Considine and Sons",
        "Street Address": "0716 Crist Dam"
      },
      {
        "name": "Toy, McClure and Konopelski",
        "Street Address": "4174 Reynolds Greens"
      }
    ],
    "books": [
      "Lead Solutions Engineer",
      "Lead Branding Engineer",
      "International Metrics Designer",
      "Human Division Consultant"
    ]
  }
]

License

ISC

Free Software, Hell Yeah!