将属性存储在已删除的 couchbase 文档中

Store attributes in deleted couchbase documents

我希望能够在 Couchbase Lite 应用程序中保存已删除记录中的数据。根据 the couchbase lite documentation,我应该能够使用此代码保存 deleted_at 属性以及所有当前属性(针对较新的 Swift 语法时代稍作修改):

do {
    try document.update { (newRev) -> Bool in
        newRev.isDeletion = true
        newRev["deleted_at"] = currentTimeStamp

        print("Document deleted at: \(document["deleted_at"])")
        // prints "Document deleted at: nil"

        print("Revision deleted at: \(newRev["deleted_at"])")
        // prints "Revision deleted at: Optional(2016-03-14)"
        return true
    }
} catch let error as NSError {
    self.handleError(error)
}

但是,如果我稍后尝试访问这些属性,它们并不存在:

print("Deleted: \(document.isDeleted)")
// prints "Deleted: Optional(true)"

print("Deleted at: \(document["deleted_at"])")  
// prints "Deleted at: nil"

我很确定这应该会打印与 deleted_at 属性关联的时间戳。

我以为couchbase可能不允许访问已删除记录的数据,但恢复记录也不允许访问:

do {
    try document.update { (newRev) -> Bool in
        newRev.isDeletion = false

        print("Document deleted at: \(document["deleted_at"])")
        // prints "Document deleted at: nil"

        print("Revision deleted at: \(newRev["deleted_at"])")
        // prints "Revision deleted at: nil"
        return true
    }
} catch let error as NSError {
    self.handleError(error)
}

print("Deleted: \(document.isDeleted)")
// prints "Deleted: Optional(false)"

print("Deleted at: \(document["deleted_at"])")  
// prints "Deleted at: nil"

我可以做些什么来让它工作吗?

CBLDocument 通常不会加载已删除的修订。大多数时候,如果文档被删除,开发人员认为它已经消失,所以 CBLDocument.currentRevision 将 return nil 而不是 returning "tombstone" 修订版。然后这会影响 属性 访问器,它调用 currentRevision.

如果你想获取墓碑修订版,因为你在其中存储了数据,你可以使用其他访问器,如 getLeafRevisionsgetRevisionHistory

(仅供参考,我写了这段代码,所以这可能是权威答案:)