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 --save
or
yarn add mongodb-data-api-fetch
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
})
See MongoDB Data API Resources.
API.findOne
API.find
API.insertOne
API.insertMany
API.updateOne
API.updateMany
API.replaceOne
API.deleteOne
API.deleteMany
API.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/