/mongodb-data-api

MongoDB Atlas Data API SDK for @nodejs

Primary LanguageTypeScriptMIT LicenseMIT

mongodb-data-api

GitHub stars   npm   Test Codecov   GitHub license

MongoDB Atlas Data API SDK for Node.js.


Installation

npm install mongodb-data-api --save

or

yarn add mongodb-data-api

Usage

Init

import { MongoDBDataAPI, Region } from 'mongodb-data-api'

// init by URL Endpoint
const api = new MongoDBDataAPI({
  apiKey: '<your_mongodb_api_key>',
  urlEndpoint: 'https://data.mongodb-api.com/app/<your_mongodb_app_id>/endpoint/data/beta'
})

// or init by app ID
const api = new MongoDBDataAPI({
  apiKey: '<your_mongodb_api_key>',
  appId: '<your_mongodb_app_id>'
})

// specific region of app
const api = new MongoDBDataAPI({
  apiKey: '<your_mongodb_api_key>',
  appId: '<your_mongodb_app_id>',
  region: Region.Virginia
})

Actions

See MongoDB Data API Resources.

Action examples

  1. find a single document
api
  .findOne({
    dataSource: '<target_cluster_name>',
    database: '<target_database_name>',
    collection: '<target_collection_name>',
    filter: { name: 'Surmon' }
  })
  .then((result) => {
    console.log(result.document)
  })
  1. insert a single document
api
  .insertOne({
    dataSource: '<target_cluster_name>',
    database: '<target_database_name>',
    collection: '<target_collection_name>',
    document: {
      name: 'Surmon',
      age: 19
    }
  })
  .then((result) => {
    console.log(result.insertedId)
  })
  1. run an aggregation pipeline
api
  .aggregate({
    dataSource: '<target_cluster_name>',
    database: '<target_database_name>',
    collection: '<target_collection_name>',
    pipeline: [
      { $match: { status: 'urgent' } },
      { $group: { _id: '$productName', sumQuantity: { $sum: '$quantity' } } }
    ]
  })
  .then((result) => {
    console.log(result.documents)
  })

Method chaining

// api.$cluster
const clusterA = api.$cluster('a')

// api.$cluster.$database
const databaseB = clusterA.$database('b')
const databaseC = clusterA.$database('c')

// api.$cluster.$database.$collection
const bItemCollection = databaseB.$collection('item')
const cItemCollection = databaseC.$collection('item')

// actions
bItemCollection.findOne({ filter: {/*...*/} })
cItemCollection.insertOne({ document: {/*...*/} })

// -------------

// chaining is equivalent to the api call
api.$cluster('a').$database('b').$collection('c').findOne({ filter: {} })
// the same as
api.findOne({
  dataSource: 'a',
  database: 'b',
  collection: 'c',
  filter: {}
})

Specific Action

You can specific the action request to prevent this package from lagging relative to the official one.

api.$$action('findOne', {
  dataSource: '...',
  database: '...',
  collection: '...',
  filter: {}
})

Development

# install dependencies
yarn

# lint
yarn lint

# test
yarn test

# build
yarn build

Changelog

Detailed changes for each release are documented in the release notes.

License

MIT