我想列出当前删除的文档,以便能够取消删除一个或多个文档。
如何查询couchdb以查找已删除的文档?我实际上正在使用pouchdb。
尽管this POST很好地描述了如何查询和取消删除文档,但它需要现有文档的ID。
我正在寻找一种方法来查询已删除的所有文件。 POST引用了对所有更改的查询。该查询将已添加的所有文档返回到已编辑/更改的任何文档。
我只查找已删除的文档。想在“垃圾箱”中查询文件。 :)
答案 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 answer的open_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
以及这些之后的任何标记)即可。