截断Azure DocumentDB的等效命令

时间:2015-10-12 10:21:42

标签: azure-cosmosdb

我有一个包含1000多个json文档的集合。我现在要删除该集合中的所有文档。

有没有办法使用查询从门户网站执行此操作?

PS:我知道我可以删除该集合并重新创建它或使用c#应用程序来完成它。

1 个答案:

答案 0 :(得分:1)

不,没有相当于DocumentDB中的SQL DELETE表达式,因此无法使用查询来执行此操作。这是一个存储过程(CoffeeScript),当我想根据查询删除时,它会为我执行此操作。

deleteSomeDocuments = (memo) ->

  collection = getContext().getCollection()

  unless memo?
    memo = {}
  if memo.returnDeleted
    unless memo.deleted?
      memo.deleted = []
  else
    memo.returnDeleted = false

  stillQueuingOperations = true

  query = () ->
    if stillQueuingOperations
      responseOptions =
        pageSize: memo.remaining
      setBody()
      if memo.filterQuery?
        memo.stillQueueing = collection.queryDocuments(collection.getSelfLink(), memo.filterQuery, responseOptions, onReadDocuments)
      else
        memo.stillQueueing = collection.readDocuments(collection.getSelfLink(), responseOptions, onReadDocuments)

  onReadDocuments = (err, resources, options) ->
    if err
      throw err

    if resources.length isnt memo.remaining
      throw new Error("Expected memo.remaining (#{memo.remaining}) and the number of rows returned (#{resources.length}) to match. They don't.")

    memo.stillQueueing = true
    while memo.remaining > 0 and memo.stillQueueing
      oldDocument = resources[memo.remaining - 1]
      documentLink = oldDocument._self
      etag = oldDocument._etag
      options = {etag}  # Sending the etag per best practice, but not handling it if there is conflict.
      getContext().getResponse().setBody(memo)
      memo.stillQueueing = collection.deleteDocument(documentLink, options)
      if memo.stillQueueing
        if memo.returnDeleted
          memo.deleted.push(oldDocument)
        memo.remaining--

  setBody = () ->
    getContext().getResponse().setBody(memo)

  query()
  return memo

exports.deleteSomeDocuments = deleteSomeDocuments