Built and signed on GitHub ActionsBuilt and signed on GitHub Actions
Built and signed on GitHub Actions
latest
denodrivers/mongo@db/mongo is a Web Native MongoDB database driver developed for Deno.
deno_mongo
deno_mongo is a MongoDB database driver developed for Deno. supports Deno Deploy as well.
ATTENTION
Deno have added the support for npm modules. so you can also use npm:mongodb
driver from now.
Each of these two drivers has its own advantages and disadvantages. you can
follow this issue for more
details. In short:
- if you want to use basic MongoDB operations and you don't care about stability, this driver just works.
- if you want most of MongoDB feature working with Deno and you don't care about
the possible overheads by using node compat layer, you may try the
npm:mongodbdriver - if you are using MongoDB Atlas, using atlas_sdk can be your best option.
Links
Import
Replace LATEST_VERSION with
current latest version
import { Bson, MongoClient, } from "https://deno.land/x/mongo@LATEST_VERSION/mod.ts";
Connect
const client = new MongoClient(); // Connecting to a Local Database await client.connect("mongodb://127.0.0.1:27017"); // Connecting to a Mongo Atlas Database await client.connect({ db: "<db_name>", tls: true, servers: [ { host: "<db_cluster_url>", port: 27017, }, ], credential: { username: "<username>", password: "<password>", db: "<db_name>", mechanism: "SCRAM-SHA-1", }, }); // Connect using srv url await client.connect( "mongodb+srv://<username>:<password>@<db_cluster_url>/<db_name>?authMechanism=SCRAM-SHA-1", );
Access Collection
// Defining schema interface interface UserSchema { _id: ObjectId; username: string; password: string; } const db = client.database("test"); const users = db.collection<UserSchema>("users");
Insert
const insertId = await users.insertOne({ username: "user1", password: "pass1", }); const insertIds = await users.insertMany([ { username: "user1", password: "pass1", }, { username: "user2", password: "pass2", }, ]);
Find
const user1 = await users.findOne({ _id: insertId }); const all_users = await users.find({ username: { $ne: null } }).toArray(); // find by ObjectId const user1_id = await users.findOne({ _id: new ObjectId("SOME OBJECTID STRING"), });
Count
const count = await users.countDocuments({ username: { $ne: null } }); const estimatedCount = await users.estimatedDocumentCount({ username: { $ne: null }, });
Aggregation
const docs = await users.aggregate([ { $match: { username: "many" } }, { $group: { _id: "$username", total: { $sum: 1 } } }, ]).toArray();
Update
const { matchedCount, modifiedCount, upsertedId } = await users.updateOne( { username: { $ne: null } }, { $set: { username: "USERNAME" } }, ); 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
const deleteCount = await users.deleteOne({ _id: insertId }); const deleteCount2 = await users.deleteMany({ username: "test" });
Cursor methods
const cursor = users.find(); // Skip & Limit cursor.skip(10).limit(10); // iterate results for await (const user of cursor) { console.log(user); } // or save results to array (uses more memory) const users = await cursor.toArray();
GridFS
// Upload const bucket = new GridFSBucket(db); const upstream = bucket.openUploadStream("test.txt"); const writer = upstream.getWriter(); writer.write(fileContents); await writer.close(); // Download const file = await new Response(bucket.openDownloadStream(id)).text();
Community Resources
Tools
- atlas_sdk TypeSafe MongoDB Atlas Data API SDK for Deno & Deno Deploy
- dangoDB A MongoDB ODM for Deno
- denomongo-unittest-utils mock mongo-collections for use in unit-tests
Examples
- deno-deploy-mongo A simple app with Deno, MongoDB and oak deployed on Deno Deploy and MongoDB Atlas
- deno_rest A simple oak based boilerplate for RESTful apis using deno_mongo
Contributing
Local testing with Docker
docker run -d -p 27017:27017 mongo- deno test -A
Built and signed on
GitHub Actions
Add Package
deno add jsr:@db/mongo
Import symbol
import * as mongo from "@db/mongo";
Import directly with a jsr specifier
import * as mongo from "jsr:@db/mongo";