vibe.d beta banner
get vibe.d
0.7.31

Struct MongoCollection

Represents a single collection inside a MongoDB.

struct MongoCollection;

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.

Constructors

Constructors

NameDescription
this
this

Properties

Properties

NameTypeDescription
database[get]MongoDatabase
name[get]string

Methods

Methods

NameDescription
aggregateCalculates aggregate values for the data in a collection.
countCounts the results of the specified query expression.
distinctReturns an input range of all unique values for a certain field for records matching the given query.
drop
dropIndex
ensureIndexCreates or updates an index.
findQueries the collection for existing documents.
findAndModifyCombines a modify and find operation to a single atomic operation.
findAndModifyExtCombines a modify and find operation to a single atomic operation with generic options support.
findOneQueries the collection for existing documents.
insertInserts new documents into the collection.
removeRemoves documents from the collection.
updatePerforms an update operation on documents matching 'selector', updating them with 'update'.

Example

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);
}

Example

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 (usr; users.find!User()) {
		logInfo("User: %s", usr.loginName);
	}

	// the same goes for findOne
	Nullable!User qusr = users.findOne!User(["_id": usr.id]);
	if (!qusr.isNull)
		logInfo("User: %s", qusr.loginName);
}
Authors

Sönke Ludwig

Copyright

© 2012-2016 RejectedSoftware e.K.

License

Subject to the terms of the MIT license, as written in the included LICENSE.txt file.