MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Laravel - Mongodb [ jenssegers/laravel-mongodb ] - Constructeur de schéma

Je sais que c'est un peu tard, mais j'ai pensé ajouter un peu de code ici. J'aime avoir un modèle indexé pour deux raisons :

  1. Je peux l'utiliser comme une interface, c'est-à-dire que je suis obligé d'entrer ces informations car cela fait partie des besoins du modèle. Cela garantit que j'ai un ensemble de données propre. Ce n'est qu'une préférence, ce n'est pas une exigence.
  2. Les recherches indexées sont plus rapides que lorsqu'elles ne le sont pas.Je n'ai pas fait suffisamment de recherches à ce sujet pour savoir si c'est le cas avec la bibliothèque jenssegers . Mais il me semble logique que, si vous utilisez un schéma pour configurer une collection et que vous le définissiez pour indexer ces champs, la recherche d'enregistrements dans cette collection serait plus rapide. Vous pouvez également configurer cela manuellement du côté Mongo, mais j'aime le fait que vous puissiez le faire avec cette extension Eloquent.

Donc à la personne qui lit ceci, si je vous ai convaincu avec cet argument non vérifié et que vous souhaitez configurer un schéma, j'ai trouvé qu'il est facile de configurer la collection mais pas facile de la supprimer. Si vous souhaitez effectuer une migration complète (sachez que vous perdrez toutes vos données en faisant cela ) alors vous pouvez utiliser le code ci-dessous :

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateYourCollectionTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::connection('mongodb')->create('collection_name', function ($collection) {
            $collection->index('field_1');
            $collection->index('field_2');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        DB::connection('mongodb')->drop(['collection_name']);
    }
}