簡體   English   中英

spring數據和mongodb:更新現有文檔的問題

[英]spring data and mongodb : issue in updating existing document

創建狀態為待處理和生成令牌的文檔,然后發送郵件

並在發送郵件后立即通過生成的令牌值檢索文檔並將之前的狀態更改為未驗證。

即使為了更新文檔狀態,首先檢索現有文檔然后才更新它,最終仍會為這兩種狀態創建兩個不同的文檔。

@Document
public class VerificationInfo {         
    private LoginInfo user; 
    private String token; 
    private String verificationStatus = VerificationStatus.PENDING.getVerificationStatus();
}

道服務

public void updateStatus(VerificationInfo verificationToken, String status) {
        VerificationInfo vt = verificationRepository.findByToken(verificationToken.getToken()).get(0);
        vt.setVerificationStatus(status);
        verificationRepository.save(vt);
    }

存儲庫

@Repository
public interface VerificationRepository extends MongoRepository<VerificationInfo, String> {
     List<VerificationInfo> findByToken(String token);
     List<VerificationInfo> findByUser(LoginInfo user);
}

數據庫條目

{ "_id" : ObjectId("5f4e7486664e197f3d745b17"), "token" : "c82907b7-e13e-484d-89cf-92ea394b6f6d", "verificationStatus" : "pending", "_class" : "com.models.VerificationInfo" }
{ "_id" : ObjectId("5f4e748b664e197f3d745b18"), "token" : "c82907b7-e13e-484d-89cf-92ea394b6f6d", "verificationStatus" : "unverified", "_class" : "com.models.VerificationInfo" }

如果狀態正確,說明你識別的文件(_id)有問題

public class VerificationInfo {
    @Id
    ObjectId _id;
    // Other fields
}

這里我們為每個文檔設置了一個唯一的 id。 所以當你創建一個對象時,它會創建一個新的文檔。 如果 _id 已經存在於數據庫中,那么它將根據特定的 id 更新文檔。

1.模型類中沒有_id

extends MongoRepository<VerificationInfo, String> ,第二個參數是id的類型。 但是在您的模型類中沒有找到任何id (通常我們使用ObjectId ,但也可以給出String

2.當你從前端獲取數據時,它總是會創建新文檔

由於您沒有 id,因此當您將數據傳遞給updateStatus(VerificationInfo verificationToken, String status) ,它將創建新的id並設置數據,這就是您總是獲得新文檔的原因。

假設您使用現有id發送數據,那么現有文檔將根據給定的id進行更新

暫無
暫無

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

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