【_ 記 】mongoDB操作数据

mongoDB数据库基本操作请点击: mongoDB数据库操作指令

order.java

import java.util.Date;

import org.bson.types.ObjectId;
import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.Transient;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;

@Document(collection="t_order")
public class Order {
   @Id
   @Indexed
   private ObjectId id;
   @Field("order_num")
   private String orderNum;
   private Date createDate;
   // 映射忽略的字段,该字段不会保存到mongodb。
   @Transient
   private String cc;
   
   public ObjectId getId() {
      return id;
   }
   public void setId(ObjectId id) {
      this.id = id;
   }
   public String getOrderNum() {
      return orderNum;
   }
   public void setOrderNum(String orderNum) {
      this.orderNum = orderNum;
   }
   public Date getCreateDate() {
      return createDate;
   }
   public void setCreateDate(Date createDate) {
      this.createDate = createDate;
   }
   public Order(ObjectId id, String orderNum, Date createDate) {
      super();
      this.id = id;
      this.orderNum = orderNum;
      this.createDate = createDate;
   }
   public Order() {
      super();
   }
   @Override
   public String toString() {
      return "Order [id=" + id + ", orderNum=" + orderNum + ", createDate="
            + createDate + "]";
   }
   
}

Person.java

import java.util.List;

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.DBRef;
import org.springframework.data.mongodb.core.mapping.Document;
@Document(collection="t_person")
public class Person {
   @Id // 主键类型只能为:String,ObjectId,BigInteger
   private String id;
   private String name;
   private int age;
   private double salary;
   @DBRef
   private List<Order> orders = null;
   
   public List<Order> getOrders() {
      return orders;
   }
   public void setOrders(List<Order> orders) {
      this.orders = orders;
   }
   public String getId() {
      return id;
   }
   public void setId(String id) {
      this.id = id;
   }
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
   public int getAge() {
      return age;
   }
   public void setAge(int age) {
      this.age = age;
   }
   public double getSalary() {
      return salary;
   }
   public void setSalary(double salary) {
      this.salary = salary;
   }
   public Person(String id, String name, int age, double salary) {
      
      this.id = id;
      this.name = name;
      this.age = age;
      this.salary = salary;
   }
   public Person() {
      
   }
   @Override
   public String toString() {
      return "Student [id=" + id + ", name=" + name + ", age=" + age
            + ", salary=" + salary + "]";
   }
   
}

操作数据库

import com.entity.Order;
import com.entity.Person;
import com.mongodb.Mongo;
import org.bson.types.ObjectId;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.data.mongodb.core.MongoTemplate;

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

public class TestMain01 {
   
   @Autowired
   private MongoTemplate temp;
   
   
   @Test
   public void test09(){
      Person person = temp.findById("1111111111",Person.class);
      System.out.println(person.getOrders());
   }
   // 根据主键id查询
   @Test
   public void test08(){
      Person person = temp.findById("1111111111",Person.class);
      System.out.println(person.getOrders());
   }
   // 测试有级联关系的两个对象
   @Test
   public void test06(){
      Person p = new Person("1111111111","haha",23,1111);
      List<Order> list =new ArrayList<Order>();
      for(int i = 0 ; i < 3; i++){
         ObjectId objectId  = new ObjectId(new Date());
         Order o = new Order(objectId, 111111+"_"+i, new Date());
         temp.save(o);
         list.add(o);
      }
      p.setOrders(list);
      temp.save(p);
   }
   // 删除数据
   @Test
   public void test05(){
      Person s = new Person();
      s.setId(1+"");
      temp.remove(s);
   }
   // 查询person表中的所有数据
   @Test
   public void test03(){
      List<Person> list = temp.findAll(Person.class);
      for (Person s : list) {
         System.out.println(s);
      }
   }
   // 添加数据
   @Test
   public void test02() {
      /*for(int i = 0 ;  i< 5;i++){
         Student s = new Student(10+i+"", "zhangsan"+i, 12*i, 2000+i);
         temp.save(s);
      }*/
      // 主键如果存在,进行更新
      /*Student s = new Student("2", "zhangsasssssn", 111, 2000);
      temp.save(s);*/
      /**
       * insert方法:如果key存在,报错
       */
      Person s = new Person("2", "aa", 111, 2000);
      temp.insert(s);
   }
   // 查询所有的库
   @Test
   public void test01() {
      Mongo mongo = ac.getBean("mongo1",Mongo.class);
      List<String> list = mongo.getDatabaseNames();
      for (String dbName : list) {
         System.out.println(dbName);
      }
      
   }
}

import com.entity.Person;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.BasicUpdate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.data.mongodb.core.query.Update.Position;

import java.util.List;
import java.util.UUID;
import java.util.regex.Pattern;

public class TestMain02 {
   
   @Autowired
   private MongoTemplate temp;
   
   
   @Test
   public void testAddBatch(){
      for(int i = 0 ; i<10;i++){
         String id = UUID.randomUUID().toString().replace("-", "");
         Person p = new Person(id, "zhangsan"+i, 10+i*2, 10000+i*2);
         temp.save(p);
      }
   }

   @Test  //   排序
   public void testOrder(){
      Query query = new  Query();
      query.addCriteria(new Criteria().where("age").gt(10));
      query.limit(10);
      query.skip(2);
      // 按照salary的升序排列
//    query.with(new Sort(Direction.ASC,"salary"));
      // 按照salary的降序排列
      query.with(new Sort(Direction.DESC, "salary"));
      List<Person> list = temp.find(query, Person.class);
      
      bianli(list);
   }
   @Test  
   public void testLimitSkip(){
      Query query = new  Query();
      query.addCriteria(new Criteria().where("age").gt(10));
      query.limit(10);
      query.skip(2);
      List<Person> list = temp.find(query, Person.class);
      bianli(list);
   }
   @Test  // 查询与数组相关的信息
   public void testQuery03(){
      Query query = new  Query();
      Pattern pattern = Pattern.compile("^.*1.*$", Pattern.CASE_INSENSITIVE);

      query.addCriteria(Criteria.where("name").regex(pattern));
      List<Person> list = temp.find(query, Person.class);
      bianli(list);
   }
   @Test  // 查询与数组相关的信息
   public void testQuery02(){
      Query query = new  Query();
      // 查询  age数组长度为4的数据
//    query.addCriteria(Criteria.where("age").size(4));
      // 查询 age数组第三位 为 "aa"的记录
//    query.addCriteria(Criteria.where("age.2").is("aa"));
      List<Person> list = temp.find(query, Person.class);
      bianli(list);
   }
   @Test
   public void testQuery01(){
      Query query = new  Query();
      // 查询  age =18
      //query.addCriteria(new Criteria().where("age").is(18));
      //查询 age > 12 并且  age< 20
      //query.addCriteria(new Criteria().andOperator(new Criteria("age").gt(12),new Criteria("age").lt(20)));
      //查询  age =1  或者 age = 100
//    query.addCriteria(new Criteria().orOperator(new Criteria("age").is(1),new Criteria("age").is(1000)));
      // 查询  age  in  (1,2)
//    query.addCriteria(new Criteria().where("age").in(1,2));
      
      // 查询  age值  除以5  余数为2的数据
      query.addCriteria(new Criteria("age").mod(5,2));
      List<Person> list = temp.find(query, Person.class);
      bianli(list);
   }
   public void bianli(List<Person> list){
      for (Object o : list) {
         System.out.println(o);
      }
   }
   @Test
   public void testUpdate04(){
      Query query = new  Query();
      query.addCriteria(new Criteria().where("key1").is("hello 1"));
      Update update = new Update();
      update.set("key1", "value1");
      update.pushAll("age",new Object[]{12,"aa",13});
      temp.updateFirst(query,update, Person.class);
   }
   @Test
   public void testUpdate03(){
      Query query = new  Query();
      query.addCriteria(new Criteria("age").gt(26).lt(30));
      // 用新元素替换旧元素
      DBObject obj = new BasicDBObject("key1", "value1");
      Update update = new BasicUpdate(obj);
      temp.updateFirst(query,update, Person.class);
   }
   @Test
   public void testUpdate02(){
      Query query = new  Query();
      query.addCriteria(new Criteria("age").gt(26).lt(30));
      // 用新元素替换旧元素
      DBObject obj = new BasicDBObject("key1", "value1");
      Update update = new BasicUpdate(obj);
      temp.updateFirst(query,update, Person.class);
   }
   @Test
   public void testUpdate01(){
      Query query = new  Query();
      query.addCriteria(new Criteria("age").gt(26).lt(30));
      // 在原始旧数据的基础上进行修改
      Update update = new Update();
      update.set("name","helloe zhangsan"); //根据key,对对应的值进行更新
      update.inc("salary", 3);  // 将该key对于的值进行递增
      update.pull("optKey",new String[]{"optionValue1","optionValue2"});//只对数组有效。 将新数据压入到key对应的数组中
      update.pop("optKey", Position.FIRST); // 只能对数组有用。将数组特定位置的元素移除
      
      temp.updateFirst(query,update, Person.class);
   }
   
}
发布了116 篇原创文章 · 获赞 116 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/o_o814222198/article/details/100847858
今日推荐