Spring Data MongoDB:插入文档

在Spring数据MongoDB中,可以使用save()insert()将一个对象或对象列表保存到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);

默认情况下,如果您保存了一个对象,但未指定任何“集合名称”,则将使用类名称作为集合名称。

1.保存并插入

您应该使用保存还是插入?

  1. 保存–应该重命名为saveOrUpdate() ,如果不存在“ _id”,则执行insert()如果存在“ _id”,则执行update()
  2. 插入–仅插入,如果存在“ _id”,则会生成错误。

见下面的例子

//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.插入文件示例

查看完整的示例,向您展示如何将一个“用户”对象或一个“对象”对象列表保存到MongoDB中。

SpringMongoConfig.java – Create a mongoTemplate bean in Spring container.
package com.mkyong.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;
		
	}
		
}

保存此对象时,使用@Document定义“集合名称”。 在这种情况下,当“用户”对象保存时,它将保存到“用户”集合中。

User.java
package com.mkyong.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
}

完整的示例向您展示了不同的插入数据,阅读代码和注释的方式,以进行自我解释。

App.java
package com.mkyong.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.mkyong.config.SpringMongoConfig;
import com.mkyong.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<User> userList = new ArrayList<User>();
		userList.add(userC);
		userList.add(userD);
		userList.add(userE);
		mongoOperation.insert(userList, User.class);

		// find
		List<User> 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);
	}

}

输出量

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控制台

查看Mongo控制台,查看插入和创建的内容。

> 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.mkyong.user.User", 
"ic" : "1000", "name" : "apple", "age" : 54, "createdDate" : ISODate("2013-04-06T05:04:06.384Z") }

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

PS要删除多余的_class列,请阅读本文– Spring Data MongoDB删除_class列

下载源代码

下载它– SpringData-MongoDB-Insert-Example.zip (24KB)

参考文献

  1. Spring Data MongoDB –保存,更新和删除文档
  2. Spring Data MongoDB Hello World示例

翻译自: https://mkyong.com/mongodb/spring-data-mongodb-insert-document/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值