MongoDB Atlas Data API SDK for Cloudflare Workers.
Fully compatible with https://github.com/surmon-china/mongodb-data-api/
npm install mongodb-data-api-fetch --saveor
yarn add mongodb-data-api-fetchimport { 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 })See MongoDB Data API Resources.
API.findOneAPI.findAPI.insertOneAPI.insertManyAPI.updateOneAPI.updateManyAPI.replaceOneAPI.deleteOneAPI.deleteManyAPI.aggregate
- find a single document
const { document } = await api.findOne({ dataSource: '<target_cluster_name>', database: '<target_database_name>', collection: '<target_collection_name>', filter: { name: 'Surmon' } })- 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 } })- 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' } } } ] })// 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: {} })You can specify the action request to prevent this package from lagging relative to the official one.
api.$$action('findOne', { dataSource: '...', database: '...', collection: '...', filter: {} })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({ ... })Please refer to https://github.com/surmon-china/mongodb-data-api/
