如何查询pouchdb以查找已删除的文档?

时间:2017-08-11 17:44:46

标签: couchdb pouchdb

我想列出当前删除的文档,以便能够取消删除一个或多个文档。

如何查询couchdb以查找已删除的文档?我实际上正在使用pouchdb。

尽管this POST很好地描述了如何查询和取消删除文档,但它需要现有文档的ID。

我正在寻找一种方法来查询已删除的所有文件。 POST引用了对所有更改的查询。该查询将已添加的所有文档返回到已编辑/更改的任何文档。

我只查找已删除的文档。想在“垃圾箱”中查询文件。 :)

3 个答案:

答案 0 :(得分:4)

从沙发2.1.0开始,您可以向for($i=0; $i<$N; $i++) { $stmt = mysqli_prepare($dbcon,"UPDATE book SET book_copies = book_copies - 1 where book_id=?") or die(mysqli_error($dbcon)); mysqli_stmt_bind_param($stmt, "i", $id[$i]); mysqli_stmt_execute($stmt) or die(mysqli_error($dbcon)); // Your insert-query (still NEEDS protection against SQL-injection!!!) mysqli_query($dbcon,"insert borrowdetails (book_id,borrow_id,borrow_status) values('$id[$i]','$borrow_id','pending')")or die(mysqli_error($dbcon)); } Feed添加各种选择器。因此,您只输出已删除文档的请求将是:

curl -X POST -H“content-Type:application / json”“http://adm:pass@127.0.0.1:15984/tracks/_changes?filter=_selector”-d'{“selector”:{“_ delete”:true}}'

答案 1 :(得分:0)

您可以在PouchDB中的_changes Feed中添加过滤器:https://pouchdb.com/api.html#filtered-changes

var changes = db.changes({
  filter: function(doc) {
    return doc._deleted;
  }
}).on('change', function(change) {
  console.log(change.id);
})

答案 2 :(得分:0)

对于结合了this answeropen_revs技巧的一站式解决方案,这是我想出的TypeScript代码:

const db = new PouchDB('my-db');

async function deletedDocIds(): Promise<string[]> {
  const ret: string[] = [];
  return new Promise((resolve, reject) => {
    db.changes({filter: d => d._deleted})
        .on('change', c => ret.push(c.id))
        .on('complete', () => resolve(ret))
        .on('error', e => reject(e));
  });
}

async function deletedDocs() {
  const ids = await deletedDocIds();
  return Promise.all(ids.map(id => db.get(id, {revs: true, open_revs: 'all'}).then(x => {
    const revs = (x[0].ok as any)._revisions;
    const lastRev = (revs.start - 1) + '-' + revs.ids[1];
    return db.get(id, {rev: lastRev}); // with Pouchdb keys too
  })));
}

调用deletedDocs()会返回一个 all 个删除文档的承诺,这些文档是删除前的版本

注意,数组的元素将包括PouchDb元数据以及文档的键。

2,我在这里使用的pouchdb-browser的DefinitelyTyped的TypeScript绑定的6.1.3版本(尽管也应该适用于@types/pouchdb)似乎并不知道_revisions键,因此as any逃生舱口。

3,手动将其转换为普通JS只是简单,只需删除类型声明和强制(:as以及这些之后的任何标记)即可。