什么是查询或其他一些快速方法来删除与集合中where条件匹配的所有文档?
我想要的东西,DELETE * FROM c WHERE c.DocumentType = 'EULA'但显然,它不起作用.
注意:我不是在寻找任何C#实现.
我可以UPDATE为 Azure Cosmos DB编写语句吗?SQL API 支持查询,但更新呢?
特别是,我希望更新文档而不必检索整个文档。我有文档的 ID,我知道我想在文档中更新的确切路径。例如,假设我的文档是
{
"id": "9e576f8b-146f-4e7f-a68f-14ef816e0e50",
"name": "Fido",
"weight": 35,
"breed": "pomeranian",
"diet": {
"scoops": 3,
"timesPerDay": 2
}
}
Run Code Online (Sandbox Code Playgroud)
我想更新diet.timesPerDay到 ID 所在的 1 "9e576f8b-146f-4e7f-a68f-14ef816e0e50"。我可以在不完全替换文档的情况下使用 Azure SQL API 做到这一点吗?
是否可以使用类似 SQL 的逻辑在 Azure Cosmos DB 中使用带有 where 子句的更新查询,就像在这个语句中一样?
Update Tasks set Tasks.name='Update My Task'
where Tasks.categoryId='695c9592-a42b-48a9-b266-1cfd55490a0a'
and Tasks.taskOrder >=1
Run Code Online (Sandbox Code Playgroud)
我看到没有等效的 SQL 查询,但是有没有一种方法可以执行逻辑上等效于有效 UPDATE 的操作——PATCH,而不是 PUT?
在这个SO问题中,我了解到无法使用SQL删除Cosmos DB文档。
使用Python,我相信我需要该DeleteDocument()方法。这就是我获取所需的文档ID的方式(我相信),然后调用该DeleteDocument()方法。
# set up the client
client = document_client.DocumentClient()
# use a SQL based query to get a bunch of documents
query = { 'query': 'SELECT * FROM server s' }
result_iterable = client.QueryDocuments('dbs/DB/colls/coll', query, options)
results = list(result_iterable);
for x in range(0, len (results)):
docID = results[x]['id']
Run Code Online (Sandbox Code Playgroud)
现在,在这个阶段我想打电话给DeleteDocument()。输入到其中的document_link和options。
我可以定义document_link为
document_link = 'dbs/DB/colls/coll/docs/'+docID
Run Code Online (Sandbox Code Playgroud)
并成功调用ReadAttachments()例如,其输入与相同DeleteDocument()。
但是,当我这样做时,我会得到一个错误...
The partition key supplied in …Run Code Online (Sandbox Code Playgroud)