2017-07-26 112 views
1

我想了解這部分的API,所以我可以以最有效的方式更新文檔。DocumentDB:「Upsert」有什麼意義?

考慮以下幾點:

  • Replace」要求的文件已經存在
  • Upsert」不需要的文件存在,但需要它是否會做一個更新的文檔ID 。
  • 這兩個命令都不能執行部分文檔更新,這意味着我無法想到任何不需要先查詢文檔,然後對受影響的屬性進行更改,然後替換/插入整個文檔的情況。

如果我總是要查詢文檔第一無論如何,以避免殲滅未傳回任何UPSERT屬性值/替換,我不能做了部分更新,這有什麼意義有upsert和替換?

我是否缺少這兩個命令的預期用例?

回答

2

您已經描述了兩者之間的主要區別。 Upsert將創建一個文件,如果它尚未存在,否則覆蓋它。替換要求文件已經存在,然後覆蓋它。使用哪一個是你的應用程序的關注點。在某些情況下,您希望使用替換,因爲如果文檔不存在,它將構成業務邏輯中的錯誤。否則它們非常相似。

我知道缺少能夠進行部分更新會顯得令人沮喪。然而,Cosmos有一個強大的服務器端編程模型,採用Javascript編寫的存儲過程形式。您可以輕鬆創建一個SPROC,它接收部分文檔並進行更新,或者僅添加那些新增或更改的屬性,這些屬性會爲您提供最終需要的功能。

+0

哦!你偶然知道展示這種技術或討論涉及算法的任何樣本嗎?你在想「補丁」式解決方案嗎? –

+0

這超出了這個問題的範圍。如果你喜歡並接受這一個,然後就編寫一個存儲過程提出一個不同的問題來允許對文檔進行部分更新,我可以嘗試在那裏幫助你 –