Skip to content

Latest commit

 

History

History
189 lines (149 loc) · 4.91 KB

README.md

File metadata and controls

189 lines (149 loc) · 4.91 KB

mongodb-data-api-fetch

GitHub stars   npm   GitHub license

MongoDB Atlas Data API SDK for Cloudflare Workers.

Fully compatible with https://github.com/surmon-china/mongodb-data-api/

Installation

npm install mongodb-data-api-fetch --save

or

yarn add mongodb-data-api-fetch

Usage

Init

import { createMongoDBDataAPI } from 'mongodb-data-api-fetch'

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

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

// specific region and cloud of app
const api = createMongoDBDataAPI({
  apiKey: '<your_mongodb_api_key>',
  appId: '<your_mongodb_app_id>',
  region: '<your_mongodb_app_region>', // e.g. us-east-1
  cloud: '<your_mongodb_app_cloud>' // e.g. aws
})

Actions

See MongoDB Data API Resources.

Action examples

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

Method chaining

// select cluster
const clusterA = api.$cluster('a')
// select database
const databaseB = clusterA.$database('b')
// select collection
const collectionC = databaseB.$collection<C>('c')
// data actions
const data = await collectionC.findOne({
  filter: {
    /*...*/
  }
})
const result = await collectionC.insertOne({
  document: {
    /*...*/
  }
})

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

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

Specific Action

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

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

Original Class

You can use the original Class to implement some special requirements.

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

const customerCollection = new MongoDBDataAPI<CustomerDocument>(
  {
    apiKey: '<your_mongodb_api_key>',
    appId: '<your_mongodb_app_id>'
  },
  {
    dataSource: '<target_cluster_name>',
    database: '<target_database_name>',
    collection: '<target_collection_name>'
  }
)

const customer = await customerCollection.findOne({ ... })

Changelog

Please refer to https://github.com/surmon-china/mongodb-data-api/

License

MIT