分区键在 CRUD 操作中是强制性的吗?宇宙数据库 Java SDKv4
Is Partition key mandatory in the CRUD operations | cosmos db Java SDKv4
我正在从 documentdb SDK 迁移到 cosmosdb SDK v4。
我看到以下同步模式 api 方法
createItem
-- 有公开的方法,并且没有分区键作为参数。
upsertItem
-- 无法将分区键作为参数传递。
replaceItem
& deleteItem
--- 1 个以分区键作为参数的方法。
撇开性能不谈,
- 即使没有分区键,所有这些方法都有效吗?
- 发送 null 与不发送分区键相同? (对于 null,我认为 cosmos 可能会寻找空分区,但在
replaceItem
和 deleteItem
的情况下,它是一个以分区键作为参数的单一暴露方法。这是否意味着分区键对于 replaceItem
& deleteItem
)
无法找到任何官方文档确认。任何线索都会有很大帮助。
您在创建集合时声明了分区键。您传递给“createItem”、“upsertItem”等方法的对象将有一个 属性 名称与集合创建期间声明的分区键匹配的字段。该字段的值将用作分区键值。
示例:
集合分区键“/customerId”
要持久化的对象:
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 操作期间(通过参数或 CosmosItemRequestOptions)明确告诉 cosmos 分区键不是强制性的。
如果不可用,cosmos 将读取文档(正在 added/updated)并找到分区键。
将分区键参数作为 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)
我正在从 documentdb SDK 迁移到 cosmosdb SDK v4。
我看到以下同步模式 api 方法
createItem
-- 有公开的方法,并且没有分区键作为参数。
upsertItem
-- 无法将分区键作为参数传递。
replaceItem
& deleteItem
--- 1 个以分区键作为参数的方法。
撇开性能不谈,
- 即使没有分区键,所有这些方法都有效吗?
- 发送 null 与不发送分区键相同? (对于 null,我认为 cosmos 可能会寻找空分区,但在
replaceItem
和deleteItem
的情况下,它是一个以分区键作为参数的单一暴露方法。这是否意味着分区键对于replaceItem
&deleteItem
)
无法找到任何官方文档确认。任何线索都会有很大帮助。
您在创建集合时声明了分区键。您传递给“createItem”、“upsertItem”等方法的对象将有一个 属性 名称与集合创建期间声明的分区键匹配的字段。该字段的值将用作分区键值。
示例:
集合分区键“/customerId”
要持久化的对象:
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 操作期间(通过参数或 CosmosItemRequestOptions)明确告诉 cosmos 分区键不是强制性的。 如果不可用,cosmos 将读取文档(正在 added/updated)并找到分区键。
将分区键参数作为 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)