簡體   English   中英

使用 Spring 啟動的 Mongo Pojo,如何獲取文檔中的數據子集

[英]Mongo Pojo with Spring boot, how to fetch subset of data in a document

我有一個 Spring Boot 應用程序設置來處理 Mongo 數據 Pojo。 除其他外,我還有以下依賴項(我排除了 Jackson,而是使用 Gson)-

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <!-- Exclude the default Jackson dependency -->
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-json</artifactId>
        </exclusion>
    </exclusions>
</dependency>

我有 2 個類,都指向同一個集合。 唯一的區別是 ModuleB 缺少一些字段 -

@Document("Module")
class ModuleA extends MongoModel{
    int X = 0;
    String Y = "something";
}


@Document("Module")
class ModuleB extends MongoModel{
    String Y = "something";
}

我正在使用 MongoTemplate 來獲取數據 -

protected final MongoTemplate template;
@Override
public MongoModel get(Class<? extends MongoModel> cls, Query query) {
    query.addCriteria(Criteria.where("deleted").is(0));
    return template.findOne(query, cls);
}

現在,當我使用 spring 存儲庫獲取 ModuleA 或 ModuleB 的實例/文檔時,spring-boot 執行的選擇操作是否會有性能差異(或查詢差異)? 或者 spring-boot 是否在這兩種情況下都獲取所有字段,然后使用所需字段填充對象。

上面的例子可能看起來微不足道,但如果我有很多字段或 DBRef 到模塊內的另一個文檔,我可以在獲取數據子集而不是獲取整個文檔時節省大量處理。

為了可維護性和一致性,您不應使用多個 @Document 注釋模型來引用同一個 MongoDB 集合。

如果一個模型有不同的@Index 注釋或數據類型,或者您使用一個模型插入而另一個模型讀取或更新,它會變得非常混亂。

對於只讀操作,這些問題不會發生,但是無論如何您都不需要@Document 注釋,您可以使用投影,如@prasad_ 所述。

您應該將投影與核心域模型保持在一起,因此將來您不要忘記在核心域模型中重命名投影中的字段等后重命名投影中的字段。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM