mongoschemad 5.0.0

MongoDB Schema support

To use this package, run the following command in your project's root directory:

Manual usage
Put the following dependency into your project's dependences section:


A simple library for vibe.d adding support for structured Bson data using structs/classes and functions to simplify saving, updating and finding Mongo documents.

Can also be used without MongoDB for Bson (de)serialization.


import vibe.db.mongo.mongo;
import mongoschema;
import mongoschema.aliases : name, ignore, unique, binary;

struct Permission
	string name;
	int priority;

struct User
	mixin MongoSchema; // Adds save, update, etc.

	string username;

	ubyte[] hash;
	ubyte[] salt;

	string profilePicture = "default.png";

	Permission[] permissions;

	int sessionID;

// implement these for this example
// if you use static arrays in the functions (like using the std.digest methods)
// you need to call .idup on your arrays to copy them to GC memory, otherwise
// they would corrupt when leaving the stack frame. (returning the function)
ubyte[] generateSalt();
ubyte[] complicatedHashFunction();

User registerNewUser(string name, string password)
	User user;
	user.username = name;
	user.salt = generateSalt();
	user.hash = complicatedHashFunction(password, user.salt);
	user.permissions ~= Permission("forum.access", 1);
	// Automatically serializes and puts the object in the registered database
	// If save was already called or the object got retrieved from the
	// collection `save()` will just update the existing object.;
	// ->
	// {
	//   username: name,
	//   hash: <binary>,
	//   salt: <binary>,
	//   profile-picture: "default.png",
	//   permissions: [{
	//     name: "forum.access",
	//     priority: 1
	//   }]
	// }
	return user;

// convenience method, could also put this in the User struct
User find(string name)
	// throws if not found, can also use `tryFindOne` to get a Nullable instead
	// of throwing an exception.
	return User.findOne(["username": name]);

void main()
	// connect as usual
	auto client = connectMongoDB("localhost");

	// before accessing any MongoSchemaD functions on a struct, register the
	// structs using the `MongoCollection.register!T` function globally.

	// Links the `test.users` collection to the `User` struct.
  • webfreak
vibe-d:data, vibe-d:mongodb
5.0.1 2024-Apr-02
5.0.0 2024-Feb-05
4.2.1 2021-Jun-10
4.2.0 2021-Jun-10
4.1.0 2019-Oct-04
Show all 27 versions
Download Stats:
  • 0 downloads today

  • 0 downloads this week

  • 0 downloads this month

  • 1501 downloads total

Short URL: