簡體   English   中英

MongoDB Java異步驅動程序replaceOne似乎不起作用

[英]MongoDB Java Async Driver replaceOne doesn't seem to work

我正在嘗試使用MongoDB Async Java驅動程序更新文檔,下面是我的代碼,

// jsonString is a string of "{_id=5715e426ed3522391f106e68, name=Alex}
final Document document = Document.parse(jsonString);

Document newDocument = document.append("status", "processing");
mongoDbCollection.replaceOne(document, newDocument, (updateResult, throwable) -> {
              if (updateResult != null) {
                 log.info("UPDATED DOC ::::::>>> " + newDocument.toJson());
                 log.info("UPDATED RESULT ::::>> "+updateResult.toString());
              } else {
                 throwable.printStackTrace();
                 log.error(throwable.getMessage());
              }
   });

根據日志記錄,我確實看到如下更新的文檔,

INFO: UPDATED DOC ::::::>>> { "_id" : { "$oid" : "5715e426ed3522391f106e68" }, "status":"processing"}
INFO: UPDATED RESULT ::::>> AcknowledgedUpdateResult{matchedCount=0, modifiedCount=0, upsertedId=null}

但是,當我通過Robmongo看到收藏集時,看不到更新的文檔,它仍然顯示舊文檔。 我已經仔細檢查過我正在尋找同一個收藏,也沒有任何例外。 我在這里做錯什么了嗎?

這里的問題是這一行:

Document newDocument = document.append("status", "processing");

在“考慮”的地方,您只是分配了“新文檔副本”,但實際上,此“還”修改了document對象以附加字段。

因此,查詢不匹配,如您的輸出所示:

{matchedCount=0, modifiedCount=0, upsertedId=null}
           // ^ Right here! See 0 matched

因此,您想要的是一個“克隆”。 使用Document並不是一件容易的事,但是可以通過以下這種“ hacky”方法來完成:

Document document = Document.parse(jsonString);

Document newDocument = Document.parse(document.toJson()).append("status","processing");

System.out.println(newDocument);
System.out.println(document);

現在,您將看到newDocument包含添加項,而document保持不變,當前代碼不是這種情況,以及查詢與任何要更新的內容都不匹配的原因。

暫無
暫無

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

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