我有一个包含一些文件的集合。在我的应用程序中,我首先创建此集合,然后插入文档。此外,根据要求,我还需要截断(删除所有文档)集合。使用文档db java api我为此目的编写了以下代码 -
DocumentClient documentClient = getConnection(masterkey, server, portNo);
List<Database> databaseList = documentClient.queryDatabases("SELECT * FROM root r WHERE r.id='" + schemaName + "'", null).getQueryIterable().toList();
DocumentCollection collection = null;
Database databaseCache = (Database)databaseList.get(0);
List<DocumentCollection> collectionList = documentClient.queryCollections(databaseCache.getSelfLink(), "SELECT * FROM root r WHERE r.id='" + collectionName + "'", null).getQueryIterable().toList();
// truncate logic
if (collectionList.size() > 0) {
collection = ((DocumentCollection) collectionList.get(0));
if (truncate) {
try {
documentClient.deleteDocument(collection.getSelfLink(), null);
} catch (DocumentClientException e) {
e.printStackTrace();
}
}
} else { // create logic
RequestOptions requestOptions = new RequestOptions();
requestOptions.setOfferType("S1");
collection = new DocumentCollection();
collection.setId(collectionName);
try {
collection = documentClient.createCollection(databaseCache.getSelfLink(), collection, requestOptions).getResource();
} catch (DocumentClientException e) {
e.printStackTrace();
}
通过上面的代码,我可以成功创建一个新的集合。此外,我也可以在此集合中插入文档。但是在截断集合时我遇到了错误 -
com.microsoft.azure.documentdb.DocumentClientException: The input authorization token can't serve the request. Please check that the expected payload is built as per the protocol, and check the key being used. Server used the following payload to sign: 'delete
colls
eyckqjnw0ae=
我正在使用Azure Document DB Java API版本1.9.5。 如果您可以在我的代码中指出错误或者是否有任何其他更好的方法来截断收集,那将会非常有用。我真的很感激这里的任何帮助。
答案 0 :(得分:0)
根据你的描述&amp;代码,我认为问题是由下面的代码引起的。
try {
documentClient.deleteDocument(collection.getSelfLink(), null);
} catch (DocumentClientException e) {
e.printStackTrace();
}
您似乎想通过上面的代码删除文档,但是使用集合链接传递参数documentLink
。
因此,如果您的真实目的是删除某个集合,请使用方法DocumentClient.deleteCollection(collectionLink, options)
。