如果我没有分区键值,如何删除文档?
我有文档的def createString(n: Int): String = {
// do something here
result = "?, ?, ?, ?, ?, ?, ? " // thera are n "? " in result
result
}
和分区键的属性名称(在我的情况下为["? "]*n
)。
我尝试过:
id
错误:type
示例文档:
var docLink = UriFactory.CreateDocumentUri(databaseName, collectionName, documentId);
var resp = client.DeleteDocumentAsync(docLink).Result;
我试图获取特定文档ID的分区键值
使用C#代码...
我尝试按文档PartitionKey value must be supplied for this operation.
读取文档,然后提取{
"id": "AB12CD",
"type": "Company",
"Address": "123 Test Street"
}
值,但出现错误:id
,原因是使用以下代码。
type
我还尝试通过以下方法来尝试跨分区查询:
InvalidOperationException: PartitionKey value must be supplied for this operation.
^返回一个空列表。如果我在Azure门户上进行检查,则可以看到具有特定ID的文档确实存在于数据库中。
答案 0 :(得分:2)
只需参考此doc,您就会找到答案。
在C#代码中,请使用Undefined.Value
,一切都会好起来的。
client.DeleteDocumentAsync(
UriFactory.CreateDocumentUri(DbName, CollectionName, id),
new RequestOptions() { PartitionKey = new PartitionKey(Undefined.Value) });
希望它对您有帮助。
更新答案:
也许我昨天误会了您的要求,让我在这里重新进行说明。
首先,您的集合按分区字段type
进行分区。
1。如果您不知道分区键的值并且文档中确实有一个分区字段,请使用EnableCrossPartitionQuery
属性。
FeedOptions queryOptions = new FeedOptions
{
MaxItemCount = 10,
EnableCrossPartitionQuery = true
};
var id = '1';
var queryString = "SELECT * FROM c WHERE c.id= '" + id + "'";
var QueryInSql = client.CreateDocumentQuery<JObject>(
uri,
queryString,
queryOptions).AsDocumentQuery();
var result = QueryInSql.ExecuteNextAsync<JObject>().Result;
var res = result.ToList<JObject>(); //if result has nothing, will be empty list
Console.WriteLine("\nRead {0}", res[0]);
2。如果您知道分区键的值并且文档中确实有一个分区字段,请在FeedOptions中传递分区键属性。
3。如果您知道文档在分区集合中没有分区字段,请使用Undefined.Value
。
答案 1 :(得分:1)
万一有人使用python sdk来到delete_item
。如果该项目没有定义分区键
将空字典传递到partition_key
参数以删除该项目。
cosmosContainerClient.delete_item(item['id'], partition_key={})