spring-date-mongodb 查询

package mongodbProject1;

import java.util.List;

import mg.pojo.User;
import mg.pojo.UserList;
import mg.service.UserService;


import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.CriteriaDefinition;
import org.springframework.data.mongodb.core.query.Query;

import com.mongodb.CommandResult;
import com.mongodb.DBObject;

public class Test {
static ApplicationContext context=null;
static MongoTemplate mongoTemplate=null;
static{
     context=new ClassPathXmlApplicationContext("applicationContext.xml");
    mongoTemplate=context.getBean(MongoTemplate.class);
}
/**
 * 查询UserName中等于123的
 * where(String n) is(String s)
 */
@org.junit.Test
public void TestFind(){
    
    Query query=Query.query(
    Criteria.where("UserName").is("123"));// is相当于sql语句中的=
    DBObject obj=query.getFieldsObject();
    try{
    List<User>userlist=mongoTemplate.find(query, User.class);
    System.out.println(userlist);
    }catch(Exception e){e.printStackTrace();}
    
}
/**
 * all()方法是相当于and一样,功能是查询所有某个类型是数组或列表的字段中包含有"00"与"lzh"的记录具体详见
 * http://docs.mongodb.org/manual/reference/operator/query/all/
 * 测试数据:
 * {
   
   Password: "xyz",
  UserName: [ "school", "book", "bag", "headphone", "appliance" ],
}
 */
@org.junit.Test
public void testAll(){
    Query query=Query.query(Criteria.where("UserName").all("00","lzh"));
    try{
        List<UserList>userlist=mongoTemplate.find(query, UserList.class);System.out.println(userlist);    
    }catch(Exception e){e.printStackTrace();}
}
/**
 * elemMatch()方法使用,其数据库格式如下
 * 查询的是对象数组下对象属性是否匹配相应的值
 * 数据格式如下:
 * db.inventory.find( {
                     qty: { $all: [
                                    { "$elemMatch" : { size: "M", num: { $gt: 50} } },
                                    { "$elemMatch" : { num : 100, color: "green" } }
                                  ] }
                   } )
 */
@org.junit.Test
public void testelemMatch(){
    Criteria c=new Criteria();
    Query qm=new Query();
    qm.addCriteria(c.elemMatch(Criteria.where("UserName").is("lzh1").and("Password").is(100)));//括号里的字符串是数据字段名称
    DBObject s=qm.getQueryObject();//转换成DBObject为了更方便获取得到字符串命令
    String n=s.toString();
    Query query=Query.query(Criteria.where("user").all(s));
    try{
        List<UserList>userlist=mongoTemplate.find(query, UserList.class);System.out.println("list大小"+userlist.size()+"\n"+userlist);    
    }catch(Exception e){e.printStackTrace();}
}
/**
 * and操作,相当于sql语句中的and
 */
@org.junit.Test
public void testAnd(){
    Query query=Query.query(Criteria.where("UserName").is("00").and("Password").is("123"));
    try{
    
        List<User>userlist=mongoTemplate.find(query, User.class);System.out.println("list大小"+userlist.size()+"\n"+userlist);    
    }catch(Exception e){e.printStackTrace();}
}
/**
 * 该方法是使用regex()(正则表达式)方法以及or(或)操作查询数据
 * 相当于db.user.find({ "UserName" : "00", "$or" : [{ "Password" : /lz/ }] });
 */
@org.junit.Test
public void testor(){
    
    try{
    Criteria c=Criteria.where("Password").regex("lz");//这里的正则表达式是/lzh/
        Query query=Query.query(Criteria.where("UserName").is("00").orOperator(c));
        
        List<User>userlist=mongoTemplate.find(query, User.class);
        System.out.println("list大小"+userlist.size()+"\n"+userlist);    
    }catch(Exception e){e.printStackTrace();}
}
/**使用正则表达式查询
 * Criteria.where("Password").regex(re, options);其中re,option 都是字符串,
 * option可以选值为:i,m,x,s   i表示不区分大小写,m表示能使用^以及$等正则表达式来识别数据库中使用\n换行的每一行开始字符以及字符。
 * x
 * 具体原文介绍http://docs.mongodb.org/manual/reference/operator/query/regex/
 */
@org.junit.Test
public void testRegex(){
    
    try{
        Criteria c=Criteria.where("Password").regex("lz","i");//这里的正则表达式是/lzh/
        
            Query query=Query.query(c);
            
            List<User>userlist=mongoTemplate.find(query, User.class);
            System.out.println("list大小"+userlist.size()+"\n"+userlist);    
        }catch(Exception e){e.printStackTrace();}
}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值