美文网首页
spring data mongodb的mongotemplt使

spring data mongodb的mongotemplt使

作者: 水车 | 来源:发表于2017-11-17 19:13 被阅读1404次

    前言

    Spring Data MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,本文章是mongodb的原生查询语法和spring的MongoTemplate对比讲解的.所用对Mongodb原生的增删改查要有一定的了解

    数据库结构( User 集合样例)

    {
       "_id" : "5a0e6d48498eac55eb8bf0a4", 
        "nickname":"轩哥",
        "name":"水车",
        "age":20,
        "work":"programmer"
        "girlfriend":{
            name:"如花",
            age:40,
            work:"noJob"
        },
        "boyfriend"[
            {
                name:"狗蛋",
                age:18,
                Intimacy:99
            },
            {
                name:"麻子",
                age:21,
                Intimacy:88
            }
        ],
        playGame:["dnf","英雄联盟","绝地求生"]
    },
    ......
    

    我们会对类似以上的集合进行查询

    查询

    本地创建好类似的model,我定义的model叫MongoUser.java

    query查询语句的实现的方式有两种:

    方法一: org.springframework.data.mongodb.core.query

    语法:

    Query (Criteria criteria)  // (构造函数)
    

    接受的参数是org.springframework.data.mongodb.core.query.Criteria

    Criteria是标准查询的接口,可以引用静态的Criteria.where的把多个条件组合在一起,就可以轻松地将多个方法标准和查询连接起来

    示例1: 查询名字叫"水车"的 一条 信息
    如果是多条信息,用find(),但是用find的时候返回的是一个集合,所以在JAVA中就不能用对象去接了,而是要用List(数组)

    #mongodb语法
    db.User.findOne({"name":"水车"})
    
    #java写法1
    Query query = new Query();
    query.addCriteria(new Criteria("name").is("水车"));
    MongoUser user = this.mongoTemplate.findOne(query, MongoUser.class);
    
    #java写法2
    Query query = new Query();
    query.addCriteria(Criteria.where("name").is("水车"));
    MongoUser user = this.mongoTemplate.findOne(query, MongoUser.class);
    
    #java写法3
    Query query = new Query(Criteria.where("name").is("水车"));
    MongoUser user = this.mongoTemplate.findOne(query, MongoUser.class);
    

    示例2: 查询名字叫"水车"的,并且年龄是20岁的 一条 信息
    如果是多条信息,用find()

    #mongodb语法
    db.User.findOne({"name":"水车","age":20})
    
    #java写法1
    Query query = new Query();
    query.addCriteria(new Criteria("name").is("水车"));
    query.addCriteria(new Criteria("age").is(20));
    MongoUser user = this.mongoTemplate.findOne(query, MongoUser.class);
    
    #java写法2
    Query query = new Query();
    query.addCriteria(Criteria.where("name").is("水车").and("age").is(20));
    MongoUser user = this.mongoTemplate.findOne(query, MongoUser.class);
    
    #java写法3
    Query query = new Query(Criteria.where("name").is("水车").and("age").is(20));
    MongoUser user = this.mongoTemplate.findOne(query, MongoUser.class);
    

    示例3: 查询名字叫"水车"的或者是绰号叫"轩哥"的 一条 信息
    如果是多条信息,用find()

    #mongodb语法
    db.User.findOne({"$or":[{"name":"水车"},{"nickname":"轩哥"}]})
    
    #java写法
    Query query = new Query();
    query.addCriteria(new Criteria().orOperator(Criteria.where("name").is("水车"), Criteria.where("nickname").is("轩哥")));
    MongoUser user = this.mongoTemplate.findOne(query, MongoUser.class);
    

    示例4: 查询名字叫"水车"的年龄是20的 或者 是绰号叫"轩哥"的,年龄是20的 一条 信息
    如果是多条信息,用find()

    #mongodb语法
    db.User.findOne({"$or":[{"name":"水车","age":20},{"nickname":"轩哥","age":20}]})
    
    #java写法
    //orOperator(参数1, 参数2, ...)
    Query query = new Query();
    query.addCriteria(new Criteria().orOperator(Criteria.where("name").is("水车").and("age").is(20), Criteria.where("nickname").is("轩哥").and("age").is(20)));
    MongoUser user = this.mongoTemplate.findOne(query, MongoUser.class);
    

    示例5: 查询名字叫"水车"的或者叫"张三"的或者叫"李四"的或者叫"王麻子的" 信息

    #mongodb语法
    db.User.find({"name":{"$in":["水车","张三","李四","王麻子"]})
    
    #java写法1
    Query query = new Query();
    String[] nameStr = {"水车","张三","李四","王麻子"}
    query.addCriteria(new Criteria("name").in(nameStr));
    List<MongoUser> user = this.mongoTemplate.findOne(query, MongoUser.class);
    
    #java写法2
    Query query = new Query();
    String[] nameStr = {"水车","张三","李四","王麻子"}
    query.addCriteria(Criteria.where("name").in(nameStr));
    List<MongoUser> user = this.mongoTemplate.findOne(query, MongoUser.class);
    

    示例6: 查询 年龄大于20岁 小于30岁的人 信息

    #mongodb语法
    db.User.find({"age":{"$gt":20,"$lt":30]})
    
    #java写法
    Query query = new Query();
    query.addCriteria(Criteria.where("age").gt(20).lt(30);
    List<MongoUser> user = this.mongoTemplate.findOne(query, MongoUser.class);
    

    简单示例就到此为止下面是列出的Criteria可以接的一些方法和对应的mongodb方法

    Criteria Mongodb 说明 备注
    Criteria and (String key) $and 并且
    Criteria andOperator (Criteria…​ criteria) $and 并且
    Criteria orOperator (Criteria…​ criteria) $or 或者
    Criteria gt (Object o) $gt 大于
    Criteria gte (Object o) $gte 大于等于
    Criteria in (Object…​ o) $in 包含 可以是一个数组
    Criteria is (Object o) $is 等于
    Criteria lt (Object o) $lt 小于
    Criteria lte (Object o) $lte 小等于
    Criteria nin (Object…​ o) $nin 不包含 可以是一个数组

    稍复杂的查询
    示例7: 查询 女朋友的name叫如花的一条信息

    #mongodb语法
    db.User.findOne({"girlfriend.name":"如花")
    
    #java写法
    Query query = new Query();
    query.addCriteria(Criteria.where("girlfriend.$.name").is("如花");
    MongoUser user = this.mongoTemplate.findOne(query, MongoUser.class);
    

    示例8: 查询 name中包含"轩" 这一个字的 多条信息 --模糊查询

    #mongodb语法
    ...
    new Query(),
    
    #java写法
    Query query = new Query();
    query.addCriteria(Criteria.where("name").regex("轩");
    List<MongoUser> user = this.mongoTemplate.findOne(query, MongoUser.class);
    

    示例9: 查询 数组中数量是3的信息 --模糊查询

    #mongodb语法
    ...
    new Query(),
    
    #java写法
    Query query = new Query();
    query.addCriteria(Criteria.where("boyfriend").size(3);
    ListMongoUser user = this.mongoTemplate.findOne(query, MongoUser.class);
    

    方法二: org.springframework.data.mongodb.core.query.BasicQuery

    持续更新中...

    相关文章

      网友评论

          本文标题:spring data mongodb的mongotemplt使

          本文链接:https://www.haomeiwen.com/subject/lxnjvxtx.html