Calculates aggregate values for the data in a collection.
Counts the results of the specified query expression.
Convenience method for creating a single index. Calls createIndexes
Builds one or more indexes in the collection.
Returns an input range of all unique values for a certain field for records matching the given query.
Removes a collection or view from the database. The method also removes any indexes associated with the dropped collection.
Drops a single index from the collection by the index name.
Drops all indexes in the collection.
Unofficial API extension, more efficient multi-index removal on MongoDB 4.2+
Queries the collection for existing documents.
Combines a modify and find operation to a single atomic operation.
Combines a modify and find operation to a single atomic operation with generic options support.
Queries the collection for existing documents.
Inserts new documents into the collection.
Returns an array that holds a list of documents that identify and describe the existing indexes on the collection.
Removes documents from the collection.
Performs an update operation on documents matching 'selector', updating them with 'update'.
import vibe.data.bson; import vibe.data.json; import vibe.db.mongo.mongo; void test() { MongoClient client = connectMongoDB("127.0.0.1"); MongoCollection users = client.getCollection("myapp.users"); // canonical version using a Bson object users.insert(Bson(["name": Bson("admin"), "password": Bson("secret")])); // short version using a string[string] AA that is automatically // serialized to Bson users.insert(["name": "admin", "password": "secret"]); // BSON specific types are also serialized automatically auto uid = BsonObjectID.fromString("507f1f77bcf86cd799439011"); Bson usr = users.findOne(["_id": uid]); // JSON is another possibility Json jusr = parseJsonString(`{"name": "admin", "password": "secret"}`); users.insert(jusr); }
Using the type system to define a document "schema"
import vibe.db.mongo.mongo; import vibe.data.serialization : name; import std.typecons : Nullable; // Nested object within a "User" document struct Address { string name; string street; int zipCode; } // The document structure of the "myapp.users" collection struct User { @name("_id") BsonObjectID id; // represented as "_id" in the database string loginName; string password; Address address; } void test() { MongoClient client = connectMongoDB("127.0.0.1"); MongoCollection users = client.getCollection("myapp.users"); // D values are automatically serialized to the internal BSON format // upon insertion - see also vibe.data.serialization User usr; usr.id = BsonObjectID.generate(); usr.loginName = "admin"; usr.password = "secret"; users.insert(usr); // find supports direct de-serialization of the returned documents foreach (usr2; users.find!User()) { logInfo("User: %s", usr2.loginName); } // the same goes for findOne Nullable!User qusr = users.findOne!User(["_id": usr.id]); if (!qusr.isNull) logInfo("User: %s", qusr.get.loginName); }
Represents a single collection inside a MongoDB.
All methods take arbitrary types for Bson arguments. serializeToBson() is implicitly called on them before they are send to the database. The following example shows some possible ways to specify objects.