我正在尝试删除满足特定条件的特定集合的多个文档。理想情况下,删除这些文档后,我需要添加新文档。即使新文档已成功添加到集合中,但在删除时,仅删除了一个文档。在正确方向上的任何帮助都将受到赞赏。
我尝试了async和await的不同组合,但是没有用。只是让您知道,我在添加和删除调用中都使用了相同的会话。下面是删除多个以“ session”作为参数的文档的方法。
export async function deleteDocs(session: IDocumentSession, docs: IDoc[]) {
docs.forEach(doc => {
session.delete<Doc>(doc);
});
await session.saveChanges();
}
我应该能够删除所有符合条件的文档,而不仅仅是一个。
答案 0 :(得分:3)
DeleteByQueryOperation
使您能够通过一次查询删除大量文档
对于.Net客户端
看到:
https://ravendb.net/docs/article-page/4.1/Csharp/client-api/operations/delete-by-query
例如: 要使用Person / ByName索引从Name == Bob的服务器中删除所有文档,请使用:
var operation = store
.Operations
.Send(new DeleteByQueryOperation<Person>("Person/ByName", x => x.Name == "Bob"));
对于Node Client:
(示例来自测试)
it("can delete by query", async () => {
{
const session = store.openSession();
const user1 = Object.assign(new User(), { age: 5 });
const user2 = Object.assign(new User(), { age: 10 });
await session.store(user1);
await session.store(user2);
await session.saveChanges();
}
const indexQuery = new IndexQuery();
indexQuery.query = "from users where age == 5";
const operation = new DeleteByQueryOperation(indexQuery);
const asyncOp = await store.operations.send(operation);
await asyncOp.waitForCompletion();
{
const session = store.openSession();
const count = await session.query(User).count();
assert.strictEqual(count, 1);
}
});