如何在 pouchdb 中查询已删除的文档?
How can I query pouchdb for deleted documents?
我想列出当前已删除的文档,以便提供取消删除一个或多个文档的功能。
如何在 couchdb 中查询已删除的文档?我实际上正在使用pouchdb。
虽然 this POST 很好地描述了如何查询和取消删除文档,但它需要现有文档的 ID。
我正在寻找一种方法来查询所有已删除的文档。 POST 引用对所有更改进行查询。该查询 returns 所有已删除的文档以及任何已被删除的文档 edited/changed。
我只查找已删除的文档。考虑查询 'trash bin' 中的文档。 :)
从 couch 2.1.0 开始,您可以向 _changes
提要添加各种选择器。因此,您只输出已删除文档的请求将是:
curl -X POST -H "content-Type: application/json" "http://adm:pass@127.0.0.1:15984/tracks/_changes?filter=_selector" -d '{"selector": {"_deleted": true}}'
您可以向 PouchDB 中的 _changes 提要添加过滤器: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);
})
对于 all-in-one 解决方案结合了 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()
将 return 承诺 所有 已删除文档的数组 就在 [=32] 之前=]删除。
N.B,数组的元素将包括 PouchDb 元数据以及文档的键。
N.B。 2,我在这里使用的 pouchdb-browser 的 DefinitelyTyped 的 TypeScript 绑定版本 6.1.3(不过应该也适用于 @types/pouchdb
)似乎不知道 _revisions
键,因此as any
逃生口。
N.B。 3,这对于手动转换为纯 JS 应该是微不足道的,只需删除类型声明和强制转换(:
、as
以及这些后面的任何标记)。
我想列出当前已删除的文档,以便提供取消删除一个或多个文档的功能。
如何在 couchdb 中查询已删除的文档?我实际上正在使用pouchdb。
虽然 this POST 很好地描述了如何查询和取消删除文档,但它需要现有文档的 ID。
我正在寻找一种方法来查询所有已删除的文档。 POST 引用对所有更改进行查询。该查询 returns 所有已删除的文档以及任何已被删除的文档 edited/changed。
我只查找已删除的文档。考虑查询 'trash bin' 中的文档。 :)
从 couch 2.1.0 开始,您可以向 _changes
提要添加各种选择器。因此,您只输出已删除文档的请求将是:
curl -X POST -H "content-Type: application/json" "http://adm:pass@127.0.0.1:15984/tracks/_changes?filter=_selector" -d '{"selector": {"_deleted": true}}'
您可以向 PouchDB 中的 _changes 提要添加过滤器: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);
})
对于 all-in-one 解决方案结合了 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()
将 return 承诺 所有 已删除文档的数组 就在 [=32] 之前=]删除。
N.B,数组的元素将包括 PouchDb 元数据以及文档的键。
N.B。 2,我在这里使用的 pouchdb-browser 的 DefinitelyTyped 的 TypeScript 绑定版本 6.1.3(不过应该也适用于 @types/pouchdb
)似乎不知道 _revisions
键,因此as any
逃生口。
N.B。 3,这对于手动转换为纯 JS 应该是微不足道的,只需删除类型声明和强制转换(:
、as
以及这些后面的任何标记)。