zoukankan      html  css  js  c++  java
  • 【API知识】MongoTemplate非映射方式操作Document

    前言

      我是MongoDB小白,刚开始学。不过,我猜大多数使用MongoDB的,都是采用映射方式处理的,即需要有定义好的用于映射的实体类。但是这样的话,如果表的结构在未来可能频繁变动,增删字段,甚至添加新的数据表。那么这种方式就不太好用了。这时候就需要用非映射的方式处理。

    映射方式操作Document

      这种方式最常见,一般就是预定义一些映射的实体类,然后打上@Ducument注解。在使用MongoTemplate的查询文档的时候,一般就是根据查询语句创建一个Query对象,然后用MongoTemplate.find(query, entityClass)这样的方式,就可以返回对应的实体对象集合。这样的例子非常多,我这里就不贴代码了。

    非映射方式操作Document

      非映射方式操作Document,就是不需要预定义实体类,也就是没有实体类。我们只需要JSON数据就可以了。而刚好Document对象有提供toJson方法,可以返回一个JSON字符串。非映射方式不能直接用MongoTemplate直接find,而是要先获取集合对象,然后,在集合内部,相当于在表内部查询。

     例子如下:

    public String findTest() {
            //1.获取集合对象
            MongoCollection<Document> collection = mongoTemplate.getCollection("test");
            //2.创建用于查询的BSON对象
            Bson bson = eq("field", "value");
            //3.利用bson条件查询结果
            FindIterable<Document> documents = collection.find(bson);
            //4.将结果拼接成json数组
            StringBuilder sb = new StringBuilder();
            sb.append("[");
            for(Document document : documents) {
                sb.append(document.toJson() + ",
    ");
            }
            sb.append("]");
            return sb.toString();
        }

    可用的工具包 

      其中,eq()方法是Mongo Spring Boot整合包提供的。它表示条件:当文档的某个字段等于某个值的时候,文档被选中。这个方法是Filters的静态方法,如果要直接调用,可以通过静态引入:

    import static com.mongodb.client.model.Filters.*;

    这个类中,有很多用于过滤的方法。如eq(),ne(),gt(),lt(),in()等等更查询条件有关的。

    如果你需要用于更新的方法,那么你可导入Updaters的静态方法,如set(),unSet(),rename()等等。

    例子:

    //注意key必须是字符串,而value可以是任意类型
    Bson udpateBson = set("key", "value");

    以上就是把文档的某个字段的值改为设定的值。

    注:这两个类都来自mongodb-driver-core.jar包的com.mongodb.client.model目录下,想看更多功能可自行查看。

    如何结合查询和更新的bson来执行一个更新操作呢?

      前面的更新bson,只说明了怎么更新,而没有说明要更新谁。而一个更新操作,必然包含查询,和修改两个操作。那么如何整合两个bson来使用呢?案例如下:

    //查询条件
    Bson searchBson = eq("job", "programmer");
    //修改操作
    Bson uddateBson = set("label", "666");
    //修改所有符合条件的文档
    collection.updateMany(searchBson, uddateBson);
  • 相关阅读:
    86. Partition List
    328. Odd Even Linked List
    19. Remove Nth Node From End of List(移除倒数第N的结点, 快慢指针)
    24. Swap Nodes in Pairs
    2. Add Two Numbers(2个链表相加)
    92. Reverse Linked List II(链表部分反转)
    109. Convert Sorted List to Binary Search Tree
    138. Copy List with Random Pointer
    为Unity的新版ugui的Prefab生成预览图
    ArcEngine生成矩形缓冲区
  • 原文地址:https://www.cnblogs.com/longfurcat/p/10093281.html
Copyright © 2011-2022 走看看