In this SO question hatte ich gelernt, dass ich ein Cosmos DB-Dokument nicht mit SQL löschen kann.Cosmos DB - Dokument mit Python löschen
Mit Python glaube ich, ich brauche die DeleteDocument()
Methode. So bekomme ich die Dokument-IDs, die (glaube ich) benötigt werden, um dann die DeleteDocument()
-Methode aufzurufen.
# 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']
Nun, in diesem Stadium möchte ich DeleteDocument()
anrufen. Die Eingänge, in die document_link
und options
sind.
kann ich document_link
als so etwas wie
document_link = 'dbs/DB/colls/coll/docs/'+docID
definieren und erfolgreich ReadAttachments()
zum Beispiel nennen, die die gleichen Eingaben wie DeleteDocument()
hat.
Wenn ich aber tun, ich einen Fehler ...
The partition key supplied in x-ms-partitionkey header has fewer
components than defined in the the collection
... und jetzt bin ich total
verlorenUPDATE
Im Anschluss an Jay Hilfe, Ich glaube, ich vermisse das Element in den Optionen.
In diesem Beispiel habe ich eine Testdatenbank erstellt, es sieht aus wie dieses
Also ich denke, meine Partition Schlüssel /testPART
ist Wenn ich die partitionKey
in den Optionen jedoch enthalten, keine Ergebnisse werden zurückgegeben, (und so print len(results)
Ausgänge 0).
Entfernen partitionKey
bedeutet, dass Ergebnisse zurückgegeben werden, aber der Löschversuch wie zuvor fehlschlägt.
# Query them in SQL
query = { 'query': 'SELECT * FROM c' }
options = {}
options['enableCrossPartitionQuery'] = True
options['maxItemCount'] = 2
options['partitionKey'] = '/testPART'
result_iterable = client.QueryDocuments('dbs/testDB/colls/testCOLL', query, options)
results = list(result_iterable)
# should be > 0
print len(results)
for x in range(0, len (results)):
docID = results[x]['id']
print docID
client.DeleteDocument('dbs/testDB/colls/testCOLL/docs/'+docID, options=options)
print 'deleted', docID
Dank Jay, leider funktioniert das nicht für mich - Übergabe in diesen Optionen mit 'enableCrossPartitionQuery' als' True' oder 'False' - Fehler ist in der gleichen wie in der Frage –
@BenMayo Es ist werid. Der obige Code funktioniert gut für mich. Wenn Sie es vollständig versuchen, würden Sie bitte allgemeine Struktur Ihrer Datenbank aktualisieren, damit ich Ihnen helfen kann, dieses Problem zu lösen? In, könnten Sie sich auf diesen Fall beziehen: https: //stackoverflow.com/questions/42999586/read-document-from-documentdb-by-id-using-node-js-fails/43002819#43002819 –
Will tun und aktualisiere dich. Danke Jay. –