Spring Data MongoDB: Dokument einfügen

Spring Data MongoDB: Dokument einfügen

In Spring Data MongoDB können Siesave(),insert() verwenden, um ein oder eine Liste von Objekten in der MongoDB-Datenbank zu speichern.

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

Wenn Sie ein Objekt gespeichert und keinen "Sammlungsnamen" angegeben haben, wird standardmäßig der Klassenname als Sammlungsname verwendet.

1. Speichern und einfügen

Sollten Sie das Speichern oder Einfügen verwenden?

  1. Speichern - Es sollte insaveOrUpdate() umbenannt werden. Es führtinsert() aus, wenn "_id" NICHT vorhanden ist, oderupdate(), wenn "_id" vorhanden ist. "

  2. Einfügen - Nur einfügen, wenn "_id" vorhanden ist, wird ein Fehler generiert.

Siehe folgendes Beispiel

    //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. Beispiel zum Einfügen von Dokumenten

In einem vollständigen Beispiel sehen Sie, wie Sie ein oder eine Liste von Benutzerobjekten in MongoDB speichern.

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;

    }

}

Verwendet @Document, um einen „Sammlungsnamen“ zu definieren, wenn Sie dieses Objekt speichern. In diesem Fall wird beim Speichern eines Benutzerobjekts das Objekt in der Benutzerauflistung gespeichert.

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
}

Vollständige Beispiele zeigen Ihnen verschiedene Möglichkeiten zum Einfügen von Daten, zum Lesen von Code und Kommentaren, die sich selbst erklären lassen.

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

}

Ausgabe

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-Konsole

Überprüfen Sie die Mongo-Konsole, und sehen Sie, was eingefügt und erstellt wurde.

> 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.

Quellcode herunterladen

Laden Sie es herunter -SpringData-MongoDB-Insert-Example.zip (24 KB)