Atlas SDK
atlas_sdk is a TypeSafe MongoDB Atlas Data API SDK for Deno & Deno Deploy & Web
Why
- x/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
Permissions
This module needs net
permission. use deno run --allow-net
command
Import
Replace LATEST_VERSION
with
current latest version
import {
MongoClient,
ObjectId,
} from "https://deno.land/x/atlas_sdk@LATEST_VERSION/mod.ts";
Constructor
Authenticate via email and password
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
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
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
interface UserSchema {
_id: ObjectId;
username: string;
password: string;
}
const db = client.database("test");
const users = db.collection<UserSchema>("users");
Insert
insertOne
const insertId = await users.insertOne({
_id: new ObjectId(),
username: "user1",
password: "pass1",
});
insertMany
const insertIds = await users.insertMany([{
_id: new ObjectId(),
username: "user1",
password: "pass1",
}, {
_id: new ObjectId(),
username: "user2",
password: "pass2",
}]);
Find
findOne
const user1_id = await users.findOne({
_id: new ObjectId("SOME OBJECTID STRING"),
});
find
const allActiveUsers = await users.find({ active: true });
Count
countDocuments
// count of all active users
const count = await users.countDocuments({ active: true });
estimatedDocumentCount
// estimated count of all users
const estimatedCount = await users.estimatedDocumentCount();
Aggregation
const docs = await users.aggregate([
{ $match: { username: "many" } },
{ $group: { _id: "$username", total: { $sum: 1 } } },
]);
Update
updateOne
const { matchedCount, modifiedCount, upsertedId } = await users.updateOne(
{ username: { $ne: null } },
{ $set: { username: "USERNAME" } },
);
updateMany
const { matchedCount, modifiedCount, upsertedId } = await users.updateMany(
{ username: { $ne: null } },
{ $set: { username: "USERNAME" } },
);
Replace
const { matchedCount, modifiedCount, upsertedId } = await users.replaceOne(
{ username: "a" },
{
username: "user1",
password: "pass1",
}, // new document
);
Delete
deleteOne
const deleteCount = await users.deleteOne({ _id: insertId });
deleteMany
const deleteCount = await users.deleteMany({ username: "test" });