Spring Data MongoDB: Insérer un document

Spring Data MongoDB: Insérer un document

Dans Spring data MongoDB, vous pouvez utilisersave(),insert() pour enregistrer un ou une liste d'objets dans la base de données mongoDB.

    User user = new User("...");

    //save user object into "user" collection / table
    //class name will be used as collection name
    mongoOperation.save(user);

    //save user object into "tableA" collection
    mongoOperation.save(user,"tableA");

    //insert user object into "user" collection
    //class name will be used as collection name
    mongoOperation.insert(user);

    //insert user object into "tableA" collection
    mongoOperation.insert(user, "tableA");

    //insert a list of user objects
    mongoOperation.insert(listofUser);

Par défaut, si vous avez enregistré un objet et n’avez spécifié aucun des «noms de collection», le nom de la classe sera utilisé comme nom de collection.

1. Enregistrer et insérer

Devriez-vous utiliser la sauvegarde ou l'insertion?

  1. Enregistrer - Il doit être renommé ensaveOrUpdate(), il exécuteinsert() si «_id» n'existe PAS ouupdate() si «_id» existe ».

  2. Insérer - Insérer uniquement, si "_id" existe, une erreur est générée.

Voir l'exemple ci-dessous

    //get an existed data, and update it
    User userD1 = mongoOperation.findOne(
        new Query(Criteria.where("age").is(64)), User.class);
    userD1.setName("new name");
    userD1.setAge(100);

    //if you insert it, 'E11000 duplicate key error index' error is generated.
    //mongoOperation.insert(userD1);

    //instead you should use save.
    mongoOperation.save(userD1);

2. Exemple d'insertion de documents

Voir un exemple complet pour vous montrer comment enregistrer un ou une liste d'objets «utilisateur» dans MongoDB.

SpringMongoConfig.java – Create a mongoTemplate bean in Spring container.

package com.example.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.core.MongoTemplate;
import com.mongodb.MongoClient;

/**
 * Spring MongoDB configuration file
 *
 */
@Configuration
public class SpringMongoConfig{

    public @Bean
    MongoTemplate mongoTemplate() throws Exception {

        MongoTemplate mongoTemplate =
            new MongoTemplate(new MongoClient("127.0.0.1"),"yourdb");
        return mongoTemplate;

    }

}

Utilise @Document pour définir un «nom de collection» lorsque vous enregistrez cet objet. Dans ce cas, lorsque l'objet «utilisateur» est enregistré, il est enregistré dans la collection «utilisateurs».

User.java

package com.example.user;

import java.util.Date;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.format.annotation.DateTimeFormat.ISO;

@Document(collection = "users")
public class User {

    @Id
    private String id;

    @Indexed
    private String ic;

    private String name;

    private int age;

    @DateTimeFormat(iso = ISO.DATE_TIME)
    private Date createdDate;

    //getter and setter methods
}

Des exemples complets pour vous montrer différentes façons d'insérer des données, lire le code et les commentaires pour s'expliquer d'eux-mêmes.

App.java

package com.example.core;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;

import com.example.config.SpringMongoConfig;
import com.example.user.User;

public class App {

    public static void main(String[] args) {
        // For Annotation
        ApplicationContext ctx =
                     new AnnotationConfigApplicationContext(SpringMongoConfig.class);
        MongoOperations mongoOperation =
                     (MongoOperations) ctx.getBean("mongoTemplate");

        // Case1 - insert a user, put "tableA" as collection name
        System.out.println("Case 1...");
        User userA = new User("1000", "apple", 54, new Date());
        mongoOperation.save(userA, "tableA");

        // find
        Query findUserQuery = new Query();
        findUserQuery.addCriteria(Criteria.where("ic").is("1000"));
        User userA1 = mongoOperation.findOne(findUserQuery, User.class, "tableA");
        System.out.println(userA1);

        // Case2 - insert a user, put entity as collection name
        System.out.println("Case 2...");
        User userB = new User("2000", "orange", 64, new Date());
        mongoOperation.save(userB);

        // find
        User userB1 = mongoOperation.findOne(
                     new Query(Criteria.where("age").is(64)), User.class);
        System.out.println(userB1);

        // Case3 - insert a list of users
        System.out.println("Case 3...");
        User userC = new User("3000", "metallica", 34, new Date());
        User userD = new User("4000", "metallica", 34, new Date());
        User userE = new User("5000", "metallica", 34, new Date());
        List userList = new ArrayList();
        userList.add(userC);
        userList.add(userD);
        userList.add(userE);
        mongoOperation.insert(userList, User.class);

        // find
        List users = mongoOperation.find(
                           new Query(Criteria.where("name").is("metallica")),
               User.class);

        for (User temp : users) {
            System.out.println(temp);
        }

        //save vs insert
        System.out.println("Case 4...");
        User userD1 = mongoOperation.findOne(
                          new Query(Criteria.where("age").is(64)), User.class);
        userD1.setName("new name");
        userD1.setAge(100);

        //E11000 duplicate key error index, _id existed
        //mongoOperation.insert(userD1);
        mongoOperation.save(userD1);
        User userE1 = mongoOperation.findOne(
                         new Query(Criteria.where("age").is(100)), User.class);
        System.out.println(userE1);
    }

}

Sortie

Case 1...
User [id=id, ic=1000, name=apple, age=54, createdDate=Sat Apr 06 12:35:15 MYT 2013]
Case 2...
User [id=id, ic=2000, name=orange, age=64, createdDate=Sat Apr 06 12:59:19 MYT 2013]
Case 3...
User [id=id, ic=3000, name=metallica, age=34, createdDate=Sat Apr 06 12:59:19 MYT 2013]
User [id=id, ic=4000, name=metallica, age=34, createdDate=Sat Apr 06 12:59:19 MYT 2013]
User [id=id, ic=5000, name=metallica, age=34, createdDate=Sat Apr 06 12:59:19 MYT 2013]
Case 4...
User [id=id, ic=2000, name=new name, age=100, createdDate=Sat Apr 06 12:59:19 MYT 2013]

3. Mongo Console

Consultez la console Mongo, voyez ce qui est inséré et créé.

> mongo
MongoDB shell version: 2.2.3
connecting to: test

> show dbs
admin   0.203125GB
yourdb  0.203125GB

> use yourdb
switched to db yourdb
> show collections
system.indexes
tableA
users

> db.tableA.find()
{ "_id" : ObjectId("id"), "_class" : "com.example.user.User",
"ic" : "1000", "name" : "apple", "age" : 54, "createdDate" : ISODate("2013-04-06T05:04:06.384Z") }

> db.users.find()
{ "_id" : ObjectId("id"), "_class" : "com.example.user.User",
"ic" : "3000", "name" : "metallica", "age" : 34, "createdDate" : ISODate("2013-04-06T05:04:06.735Z") }
{ "_id" : ObjectId("id"), "_class" : "com.example.user.User",
"ic" : "4000", "name" : "metallica", "age" : 34, "createdDate" : ISODate("2013-04-06T05:04:06.735Z") }
{ "_id" : ObjectId("id"), "_class" : "com.example.user.User",
"ic" : "5000", "name" : "metallica", "age" : 34, "createdDate" : ISODate("2013-04-06T05:04:06.735Z") }
{ "_id" : ObjectId("id"), "_class" : "com.example.user.User",
"ic" : "2000", "name" : "new name", "age" : 100, "createdDate" : ISODate("2013-04-06T05:04:06.731Z") }

P.S To remove the extra _class column, read this article – Spring Data MongoDB Remove _class Column.

Télécharger le code source

Téléchargez-le -SpringData-MongoDB-Insert-Example.zip (24 Ko)