Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/erfanium/atlas_sdk
TypeSafe MongoDB Atlas Data API SDK for Deno, Deno Deploy and Node.js
https://github.com/erfanium/atlas_sdk
atlas deno mongo-atlas mongodb sdk typescript
Last synced: 6 days ago
JSON representation
TypeSafe MongoDB Atlas Data API SDK for Deno, Deno Deploy and Node.js
- Host: GitHub
- URL: https://github.com/erfanium/atlas_sdk
- Owner: erfanium
- License: mit
- Created: 2022-04-15T09:57:27.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-04-25T09:43:24.000Z (7 months ago)
- Last Synced: 2024-10-03T12:24:07.342Z (about 1 month ago)
- Topics: atlas, deno, mongo-atlas, mongodb, sdk, typescript
- Language: TypeScript
- Homepage: https://deno.land/x/atlas_sdk
- Size: 34.2 KB
- Stars: 42
- Watchers: 3
- Forks: 6
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Atlas SDK
> **atlas_sdk** is a TypeSafe
> [MongoDB Atlas Data API](https://www.mongodb.com/docs/atlas/api/data-api/#introduction)
> SDK for Deno & Deno Deploy & Web[![Discord server](https://img.shields.io/discord/768918486575480863?color=blue&label=Ask%20for%20help%20here&logo=discord&style=flat-square)](https://discord.gg/HEdTCvZUSf)
## Why
- [x/mongo](https://github.com/denodrivers/deno_mongo) is not production ready
and reliable, but this module is
- It's serverless friendly. because atlas data api uses `https` protocol,
there's no need to wait for MongoClient to be connected. this will reduce cold
start time.
- Can be used on Web and Node.js v17+ environments, because this module only
depends on `fetch`## Links
- [Docs](https://doc.deno.land/https/deno.land/x/atlas_sdk/mod.ts)
## Permissions
This module needs `net` permission. use `deno run --allow-net` command
### Import
Replace `LATEST_VERSION` with
[current latest version](https://deno.land/x/atlas_sdk)```ts
import {
MongoClient,
ObjectId,
} from "https://deno.land/x/atlas_sdk@LATEST_VERSION/mod.ts";
```### Constructor
#### Authenticate via email and password
[Documentation](https://www.mongodb.com/docs/atlas/app-services/authentication/email-password/#std-label-email-password-authentication)
```ts
const client = new MongoClient({
endpoint: "https://data.mongodb-api.com/app/YOUR_APP_ID/endpoint/data/v1",
dataSource: "YOUR_CLUSTER_NAME", // e.g. "Cluster0"
auth: {
email: "YOUR_EMAIL",
password: "YOUR_PASSWORD",
},
});
```#### Authenticate via api-key
[Documentation](https://www.mongodb.com/docs/atlas/app-services/authentication/api-key/#std-label-api-key-authentication)
```ts
const client = new MongoClient({
endpoint: "https://data.mongodb-api.com/app/YOUR_APP_ID/endpoint/data/v1",
dataSource: "YOUR_CLUSTER_NAME", // e.g. "Cluster0"
auth: {
apiKey: "YOUR_API_KEY",
},
});
```#### Authenticate via custom JWT
[Documentation](https://www.mongodb.com/docs/atlas/app-services/authentication/custom-jwt/#std-label-custom-jwt-authentication)
```ts
const client = new MongoClient({
endpoint: "https://data.mongodb-api.com/app/YOUR_APP_ID/endpoint/data/v1",
dataSource: "YOUR_CLUSTER_NAME", // e.g. "Cluster0"
auth: {
jwtTokenString: "YOUR_JWT",
},
});
```### Define Schema Type
```ts
interface UserSchema {
_id: ObjectId;
username: string;
password: string;
}const db = client.database("test");
const users = db.collection("users");
```### Insert
#### insertOne
```ts
const insertId = await users.insertOne({
_id: new ObjectId(),
username: "user1",
password: "pass1",
});
```#### insertMany
```ts
const insertIds = await users.insertMany([{
_id: new ObjectId(),
username: "user1",
password: "pass1",
}, {
_id: new ObjectId(),
username: "user2",
password: "pass2",
}]);
```### Find
#### findOne
```ts
const user1_id = await users.findOne({
_id: new ObjectId("SOME OBJECTID STRING"),
});
```#### find
```ts
const allActiveUsers = await users.find({ active: true });
```### Count
#### countDocuments
```ts
// count of all active users
const count = await users.countDocuments({ active: true });
```#### estimatedDocumentCount
```ts
// estimated count of all users
const estimatedCount = await users.estimatedDocumentCount();
```### Aggregation
```ts
const docs = await users.aggregate([
{ $match: { username: "many" } },
{ $group: { _id: "$username", total: { $sum: 1 } } },
]);
```### Update
#### updateOne
```ts
const { matchedCount, modifiedCount, upsertedId } = await users.updateOne(
{ username: { $ne: null } },
{ $set: { username: "USERNAME" } },
);
```#### updateMany
```ts
const { matchedCount, modifiedCount, upsertedId } = await users.updateMany(
{ username: { $ne: null } },
{ $set: { username: "USERNAME" } },
);
```### Replace
```ts
const { matchedCount, modifiedCount, upsertedId } = await users.replaceOne(
{ username: "a" },
{
username: "user1",
password: "pass1",
}, // new document
);
```### Delete
#### deleteOne
```ts
const deleteCount = await users.deleteOne({ _id: insertId });
```#### deleteMany
```ts
const deleteCount = await users.deleteMany({ username: "test" });
```