Skip to main content
Drupal is a registered trademark of Dries Buytaert
Release: Views Bootstrap 5.5.4 — Minor update available for module views_bootstrap (5.5.4). Release: Rightup theme 1.0.3 — Minor update available for theme vartheme_bs5_rightup (1.0.3). Release: CommentOn 1.0.6 — Minor update available for module commenton (1.0.6). Release: ChatGPT Ads 1.0.3 — Minor update available for module chatgpt_ads (1.0.3). Release: Opensolr Search 5.1.3 — Minor update available for module opensolr_search (5.1.3). Release: ServiceM8 Webform Integration 1.2.1 — Minor update available for module servicem8_webform (1.2.1). Release: PostfixAdmin 1.0.0 — Initial release available for module postfix_admin (1.0.0)! Release: ip_analyser 1.0.3 — Minor update available for module ip_analyser (1.0.3). Module Revived: Swagger-PHP OpenAPI 3 documentation generator 1.0.0 — Module swagger_php updated after 10 months of inactivity (1.0.0). Security Coverage: Microsoft Azure AI — Module ai_provider_azure now has official Drupal security advisory coverage.

This module allows you to store content entities in a MongoDB database. By extending specific classes provided by the module, you can leverage MongoDB for scalable and high-performance content storage. It provides no interface but easy entity's annotation replacement and some configurations.

It does not YET provide anyway to move or configure nodes into mongoDB. But you can use it for new entities to integrate seamlessly in your new or existing project.

Revisioning is also not yet properly implemented. It is in the TODO

Features

  • Seamless transition from SQL to MongoDB for content entities.
  • Support for string-based IDs in URLs, if using forms.
  • Easily configurable MongoDB indexes within entity annotations.
  • Supports aggregations
  • Views are currently not supported due to SQL-based storage expectations.

It tries to leverage the same Entity Query Interface used for SQL but aggregation just has a simple aggregate() function that can be used to run pipelines. The module is still under development, so if you find any issues or have ideas, please create an issue!

Installation

  • Ensure you have the mongodb dependency installed.
  • Create or choose an existing content entity.
  • Extend your entity storage from Drupal\mongo_content_entity_type\Storage\MongoContentEntityTypeStorage.
  • Extend your entity class from Drupal\mongo_content_entity_type\Entity\MongoContentEntityBase.
  • Extend the entity interface from Drupal\mongo_content_entity_type\Entity\MongoContentEntityBaseInterface.
  • (Optional) If using forms, extend MongoHtmlRouteProvider instead of AdminHtmlRouteProvider.
  • For Views, remove the views_data class as it's not supported.

Extend entity storage from within the entity's annotation

* @ContentEntityType(
 ..........................
 *   handlers = {
 *     "storage" = "Drupal\mongo_content_entity_type\Storage\MongoContentEntityTypeStorage",*
 *   },
 * ......................
 *   entity_keys = {
 *     "id" = "_id",
 *    ....................
 *   },
 *   mongo_indexes_fields = {
 *   ................
 *   }
 * )
 */

Entity Class, just extend the class from MongoContentEntityBase

use Drupal\mongo_content_entity_type\Entity\MongoContentEntityBase;

class Activity extends MongoContentEntityBase implements ActivityInterface {

  use EntityChangedTrait;
  use EntityPublishedTrait;
.......
........

Entity Class Interface, just extend the class from MongoContentEntityBaseInterface

use Drupal\mongo_content_entity_type\Entity\MongoContentEntityBaseInterface;

interface ActivityInterface extends MongoContentEntityBaseInterface, EntityChangedInterface, EntityPublishedInterface, EntityOwnerInterface {
.....
.....
.....

Update your entity's annotation the id-key from "id" to "_id"

 *   entity_keys = {
 *     "id" = "_id",
 *     ...
 *     ...
 *   },

At the end of the annotation, if you require indexes to be created, add the them like so

*   mongo_indexes_fields = {
 *      "string_indexes" = {
 *          "name" = "text",
 *          "description" = "text"
 *      },
 *      "numeric_indexes" = {
 *          "pid" = {
 *                "value" = -1,
 *                "extra" = {
 *                    "unique" = 1
 *                 }
 *            },
 *          "created" = -1,
 *          "ip_address" = 1
 *     }
 *     "compound_indexes" = {
 *        "cmp_1" = {
 *          "fields" = {
 *              "user_id" = -1,
 *              "source_id" = 1
 *          }
 *        }
 *     }
 *   }

After installation, navigate to your settings.php MongoDB module configuration to add your database to the list of "entities" databases.

$settings['mongodb'] = [
  'clients' => [
    ....
  ],
  'databases' => [
    .....
    'entities' => ['default', "YOUR_DATABASE_NAME"],
  ],
];

Additional Requirements

You need to configure first the main MongoDB module

No additional libraries

Community Documentation

TODO. Soon I will try add detailed documentation but below are simple examples.

Simple Entity Interface API, just like the regular way of accessing it

$entities = \Drupal::entityTypeManager()->getStorage('YOUR_ENTITY_TYPE')
      ->loadMultiple($ids);

Aggregation example. It is different from the SQL Aggregation. aggregate() accepts two parameters, stage as a string and query as an array. It is sufficient to compose any type of pipeline.

// Initialize query and apply conditions
$query = \Drupal::entityQueryAggregate('YOUR_ENTITY_TYPE')...
// or
$query = mongo_get_query_aggregate('YOUR_ENTITY_TYPE')
  ->aggregate('$match', $filter_conditions)
  
  // Add a 'facet' stage to process metadata and ids
  ->aggregate('$facet', [
    'metadata' => [['$group' => ['_id' => null, 'total' => ['$sum' => 1]]]],
    'ids' => [
      ['$sort' => ['created' => -1]],
      ['$skip' => (int)$offset],
      ['$limit' => (int)$limit],
      ['$project' => ['_id' => '$_id']]
    ]
  ]);

// simple
$data = $query->execute();
// full documents
$query->fetchDocuments()->execute();
// for count
$count = $query->count()->execute();

Depends on

Dependencies of the latest stable release

No dependencies recorded for this project.

Required by

Tracked projects that depend on this one

No tracked projects depend on this one yet.

Activity

Tracked releases
5
Tracked since
Oct 2023
Latest release
2 years ago
Releases (12 mo)
0
Maintenance
Dormant

Release Timeline

Releases

Version Type Core Release date
1.3.1-rc1 Pre-release Aug 26, 2024
1.3.x-dev Dev Aug 26, 2024
1.2.x-dev Dev Oct 25, 2023
1.1.x-dev Dev Oct 22, 2023
1.0.x-dev Dev Oct 8, 2023