![](/img/trans.png)
[英]Difference between partition key indicated in query expression and feedoptions in cosmos db
[英]Is Partition key mandatory in the CRUD operations | cosmos db Java SDKv4
我正在從 documentdb SDK 遷移到 cosmosdb SDK v4。
我在同步 api 方法中看到以下模式
createItem
- 具有使用 & 不帶分區鍵作為參數公開的方法。
upsertItem
- 無法將分區鍵作為參數傳遞。
replaceItem
& deleteItem
--- 1 以分區鍵為參數的方法。
拋開性能不談,
replaceItem
和deleteItem
的情況下,它是使用分區鍵作為參數的單一暴露方法。這是否意味着分區鍵對於replaceItem
和deleteItem
是必需的)找不到任何官方文檔確認。 任何線索都會有很大幫助。
您在創建集合時聲明了一個分區鍵。 您傳遞給“createItem”“upsertItem”等方法的 object 將具有一個屬性名稱與在集合創建期間聲明的分區鍵匹配的字段。 該字段的值將用作分區鍵值。
例子:
集合分區鍵“/customerId”
Object 待持續:
public class Order {
private String id;
private String status;
private String customerId;
private BigDecimal subTotal;
private List<LineItem> lineItems = new ArrayList<>();
}
創建訂單:
public Mono<Integer> createOrder(Order order) {
return cosmosDB
.getContainer()
.createItem(order)
.map(CosmosItemResponse::getStatusCode);
}
你可以資助一個完整的工作示例,一個使用 V4 java SDK 的商店應用程序。 https://github.com/RaviTella/store
在 CRUD 操作期間,不必明確告訴 cosmos 分區鍵(通過參數或 CosmosItemRequestOptions)。 如果不可用,cosmos 會讀取文檔(正在添加/更新)並找到分區鍵。
將分區鍵參數發送為 null 與不發送分區鍵相同。
a. container.createItem(document, new PartitionKey(null), null); // cosmos looks for partition defined by null key b. container.createItem(document, null, null); // scans document to figure out partition key value as stated in (1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.