Skip to content

trophologist/mongodb-data-api-fetch

 
 

Repository files navigation

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

Packages

No packages published

Languages

  • TypeScript 98.8%
  • JavaScript 1.2%