Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/masfana/masfana-mongodb-api-sdk
A TypeScript SDK for MongoDB Atlas Data API with query operator IntelliSense.
https://github.com/masfana/masfana-mongodb-api-sdk
bun cloudflare cloudflare-workers deno hono mongodb nodejs typescript
Last synced: 3 months ago
JSON representation
A TypeScript SDK for MongoDB Atlas Data API with query operator IntelliSense.
- Host: GitHub
- URL: https://github.com/masfana/masfana-mongodb-api-sdk
- Owner: MasFana
- License: mit
- Created: 2024-09-04T19:47:14.000Z (4 months ago)
- Default Branch: master
- Last Pushed: 2024-09-08T13:06:36.000Z (4 months ago)
- Last Synced: 2024-10-13T08:06:02.515Z (3 months ago)
- Topics: bun, cloudflare, cloudflare-workers, deno, hono, mongodb, nodejs, typescript
- Language: TypeScript
- Homepage: https://www.npmjs.com/package/masfana-mongodb-api-sdk
- Size: 10.7 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# MasFana MongoDB Data API SDK
A TypeScript SDK for interacting with MongoDB Atlas Data API with full IntelliSense support for query operators.
Alternative for Native MongoDB SDK
## Installation
```bash
npm install masfana-mongodb-api-sdk
```
### Requirements
- **Node.js** version 14 or higher.
- A MongoDB Atlas account with Data API enabled. [Learn how to set up MongoDB Atlas Data API](https://www.mongodb.com/docs/atlas/app-services/data-api/).
- TypeScript project setup (if you're using TypeScript).
### Example
- [Auth With Hono](https://github.com/MasFana/masfana-mongodb-example-auth)
Simple authentication using Hono and Cloudflare Worker## Getting Started
### Step 1: Setting Up MongoDB Atlas Data API
To use this SDK, you need to enable the **Data API** in your MongoDB Atlas cluster. Here’s a brief guide:
1. Log in to your [MongoDB Atlas account](https://cloud.mongodb.com/).
2. Go to **App Services** and click **Create new application**.
3. Enable the **Data API** for your application.
4. Copy the **App ID** and **API Key** from the Data API section.
### Step 2: Environment Configuration
To use the SDK, you'll need to configure the MongoDB environment variables in your project. Create a `.env` file in the root of your project:
```bash
touch .env
```
### Step 3: Setting Up Your TypeScript Project
If you're using TypeScript, ensure that you have a basic **tsconfig.json** set up:
```json
{
"compilerOptions": {
"target": "ES6",
"module": "CommonJS",
"outDir": "./dist",
"strict": true,
"esModuleInterop": true
},
"include": ["src/**/*.ts"],
"exclude": ["node_modules"]
}
```
Create a `src/index.ts` file where you'll write your code.
### Step 4: Using the SDK
1. Import the SDK and define the types for your MongoDB documents.
2. Initialize the MongoDB API with environment variables.
3. Use the provided CRUD methods (`findOne`, `find`, `insertOne`, `updateOne`, `deleteOne`, `aggregate`).
#### Example
```typescript
import { MongoDBAPI } from "mongodb-data-api-sdk";
import * as dotenv from "dotenv";
dotenv.config();
// Define the type of the documents in your MongoDB collection
type Task = {
text: string;
status: string;
completedAt?: Date;
};
// Initialize the MongoDB API SDK with environment variables
const env = {
MONGO_API_URL: process.env.MONGO_API_URL!,
MONGO_API_KEY: process.env.MONGO_API_KEY!,
DATABASE: process.env.DATABASE!,
COLLECTION: process.env.COLLECTION!,
DATA_SOURCE: process.env.DATA_SOURCE!
};
const mongoAPI = new MongoDBAPI(env);
// Example usage of the SDK
async function run() {
try {
// Find a single document where the task status is "complete"
const task = await mongoAPI.findOne({ status: { $eq: "complete" } });
console.log("Found task:", task);
// Insert a new task
const insertResult = await mongoAPI.insertOne({ text: "Clean the kitchen", status: "open" });
console.log("Inserted task with ID:", insertResult.insertedId);
// Find all tasks with status "open", sort by `completedAt` field, and return only `text` and `status` fields
const tasks = await mongoAPI.find(
{ status: { $eq: "open" } },
{ text: 1, status: 1 },
{ completedAt: -1 },
10 // Limit to 10 results
);
console.log("Found tasks:", tasks);
// Update a task to mark it as "complete"
const updateResult = await mongoAPI.updateOne({ text: "Clean the kitchen" }, { status: "complete" });
console.log("Updated task:", updateResult);
// Delete a task
const deleteResult = await mongoAPI.deleteOne({ text: "Clean the kitchen" });
console.log("Deleted task:", deleteResult.deletedCount);
} catch (error) {
console.error("Error:", error);
}
}
run();
```
### Step 5: Running Your Application
To run the example code, ensure you’ve set up your TypeScript project and compiled your code:
```bash
# Install dependencies
npm install
# Compile TypeScript code
npm run build
# Run the compiled JavaScript code
node dist/index.js
### CRUD Operations Overview
```
1. **Find One Document**
```typescript
const task = await mongoAPI.findOne({ status: { $eq: "complete" } });
```
2. **Find Many Documents**
```typescript
const tasks = await mongoAPI.find(
{ status: { $eq: "open" } }, // Filter
{ text: 1, status: 1 }, // Projection (fields to include)
{ completedAt: -1 }, // Sort by completedAt descending
10 // Limit results to 10
);
```
3. **Insert One Document**
```typescript
const insertResult = await mongoAPI.insertOne({ text: "Buy groceries", status: "open" });
```
4. **Update One Document**
```typescript
const updateResult = await mongoAPI.updateOne({ text: "Buy groceries" }, { status: "complete" });
```
5. **Delete One Document**
```typescript
const deleteResult = await mongoAPI.deleteOne({ text: "Buy groceries" });
```
### MongoDB Query Operators Supported
Here are some common MongoDB query operators supported by this SDK:
- **`$eq`**: Matches values that are equal to a specified value.
- **`$ne`**: Matches values that are not equal to a specified value.
- **`$gt`**: Matches values that are greater than a specified value.
- **`$gte`**: Matches values that are greater than or equal to a specified value.
- **`$lt`**: Matches values that are less than a specified value.
- **`$lte`**: Matches values that are less than or equal to a specified value.
- **`$in`**: Matches any of the values specified in an array.
- **`$nin`**: Matches none of the values specified in an array.
- **`$exists`**: Matches documents where the field exists.
### TypeScript Support
The SDK is fully type-safe, so your code will have **IntelliSense** support for query operators and MongoDB operations. Here's an example of how IntelliSense helps you with MongoDB operators like `$eq`, `$gt`, and more:
```typescript
const filter = {
status: { $eq: "complete" },
completedAt: { $gt: new Date("2023-01-01") }
};
```