Guide sur MongoDB avec Java

Un guide pour MongoDB avec Java

 

1. Vue d'ensemble

Dans cet article, nous allons examiner l'intégration deMongoDB, une base de données open source NoSQL très populaire avec un client Java autonome.

MongoDB est écrit en C ++ et possède un certain nombre de fonctionnalités solides telles que la réduction de carte, le découpage automatique, la réplication, la haute disponibilité, etc.

2. MongoDB

Commençons par quelques points clés sur MongoDB lui-même:

  • stocke les données dans des documents de typeJSON qui peuvent avoir différentes structures

  • utilise des schémas dynamiques, ce qui signifie que nous pouvons créer des enregistrements sans rien prédéfinir

  • la structure d'un enregistrement peut être modifiée simplement en ajoutant de nouveaux champs ou en supprimant des champs existants

Le modèle de données mentionné ci-dessus nous donne la possibilité de représenter des relations hiérarchiques, de stocker facilement des tableaux et d'autres structures plus complexes.

3. Terminologies

La compréhension des concepts dans MongoDB devient plus facile si nous pouvons les comparer aux structures de bases de données relationnelles.

Voyons les analogies entre Mongo et un système MySQL traditionnel:

  • Table dans MySQL devient unCollection dans Mongo

  • Row devient unDocument

  • Column devient unField

  • Joins sont définis comme des documentslinking etembedded

C’est une façon simpliste d’examiner les concepts de base de MongoDB, bien qu’elle reste utile.

Passons maintenant à la mise en œuvre pour comprendre cette puissante base de données.

4. Dépendances Maven

Nous devons commencer par définir la dépendance d’un pilote Java pour MongoDB:


    org.mongodb
    mongo-java-driver
    3.4.1

Pour vérifier si une nouvelle version de la bibliothèque a été publiée -track the releases here.

5. Utilisation deMongoDB

Maintenant, commençons à implémenter les requêtes Mongo avec Java. Nous suivrons les opérations de base du CRUD car ce sont les meilleures pour commencer.

5.1. Établir une connexion avecMongoClient

Tout d'abord, établissons une connexion à un serveur MongoDB. Avec la version> = 2.10.0, nous utiliserons lesMongoClient:

MongoClient mongoClient = new MongoClient("localhost", 27017);

Et pour les anciennes versions, utilisez la classeMongo:

Mongo mongo = new Mongo("localhost", 27017);

5.2. Connexion à une base de données

Maintenant, connectons-nous à notre base de données. Il est intéressant de noter que nous n’avons pas besoin d’en créer un. Lorsque Mongo verra que cette base de données n’existe pas, il la créera pour nous:

DB database = mongoClient.getDB("myMongoDb");

Parfois, par défaut, MongoDB s'exécute en mode authentifié. Dans ce cas, nous devons nous authentifier lors de la connexion à une base de données.

Nous pouvons le faire comme présenté ci-dessous:

MongoClient mongoClient = new MongoClient();
DB database = mongoClient.getDB("myMongoDb");
boolean auth = database.authenticate("username", "pwd".toCharArray());

5.3. Afficher les bases de données existantes

Affiche toutes les bases de données existantes. Lorsque nous voulons utiliser la ligne de commande, la syntaxe d'affichage des bases de données est similaire à celle de MySQL:

show databases;

En Java, nous affichons les bases de données en utilisant le code ci-dessous:

mongoClient.getDatabaseNames().forEach(System.out::println);

La sortie sera:

local      0.000GB
myMongoDb  0.000GB

Ci-dessus,local est la base de données Mongo par défaut.

5.4. Créer unCollection

Commençons par créer unCollection (table équivalente pour MongoDB) pour notre base de données. Une fois que nous nous sommes connectés à notre base de données, nous pouvons créer unCollection comme:

database.createCollection("customers", null);

Maintenant, affichons toutes les collections existantes pour la base de données actuelle:

database.getCollectionNames().forEach(System.out::println);

La sortie sera:

customers

5.5. Enregistrer - Insérer

L'opérationsave a une sémantique de sauvegarde ou de mise à jour: si unid est présent, il effectue unupdate, sinon - il fait uninsert.

Lorsque noussave un nouveau client:

DBCollection collection = database.getCollection("customers");
BasicDBObject document = new BasicDBObject();
document.put("name", "Shubham");
document.put("company", "example");
collection.insert(document);

L'entité sera insérée dans une base de données:

{
    "_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
    "name" : "Shubham",
    "company" : "example"
}

Ensuite, nous allons regarder la même opération -save - avec la sémantique deupdate.

5.6. Enregistrer - Mettre à jour

Examinons maintenantsave avec la sémantiqueupdate, fonctionnant sur un client existant:

{
    "_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
    "name" : "Shubham",
    "company" : "example"
}

Maintenant, lorsque noussave le client existant - nous le mettrons à jour:

BasicDBObject query = new BasicDBObject();
query.put("name", "Shubham");

BasicDBObject newDocument = new BasicDBObject();
newDocument.put("name", "John");

BasicDBObject updateObject = new BasicDBObject();
updateObject.put("$set", newDocument);

collection.update(query, updateObject);

La base de données ressemblera à ceci:

{
    "_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
    "name" : "John",
    "company" : "example"
}

Comme vous pouvez le voir, dans cet exemple particulier,save utilise la sémantique deupdate, car nous utilisons un objet avec des_id donnés.

5.7. Lire unDocument à partir d'unCollection

Cherchons unDocument dans unCollection en effectuant une requête:

BasicDBObject searchQuery = new BasicDBObject();
searchQuery.put("name", "John");
DBCursor cursor = collection.find(searchQuery);

while (cursor.hasNext()) {
    System.out.println(cursor.next());
}

Il affichera les seulsDocument que nous avons maintenant dans nosCollection:

[
    {
      "_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
      "name" : "John",
      "company" : "example"
    }
]

5.8. Delete unDocument

Passons à notre dernière opération CRUD, la suppression:

BasicDBObject searchQuery = new BasicDBObject();
searchQuery.put("name", "John");

collection.remove(searchQuery);

Avec la commande ci-dessus exécutée, nos seulsDocument seront supprimés desCollection.

6. Conclusion

Cet article était une introduction rapide à l’utilisation de MongoDB à partir de Java.

L'implémentation de tous ces exemples et extraits de code peut être trouvéeover on GitHub - il s'agit d'un projet basé sur Maven, il devrait donc être facile à importer et à exécuter tel quel.