删除与 RavenDB 中的条件匹配的特定集合的多个文档

Delete multiple documents of a particular collection matching a criteria in RavenDB

我正在尝试删除满足特定条件的特定集合中的多个文档。理想情况下,删除这些文档后我需要添加新文档。即使新文档已成功添加到集合中,但在删除时也只会删除一个文档。对正确方向的任何帮助表示赞赏。

我尝试了异步和等待的不同组合,但没有奏效。只是想让你知道,我对添加和删除调用使用相同的会话。下面是删除多个接受 'session' 作为参数的文档的方法。

export async function deleteDocs(session: IDocumentSession, docs: IDoc[]) {
  docs.forEach(doc => {
    session.delete<Doc>(doc);
  });
 await session.saveChanges();
}

我应该能够删除符合条件的所有文档,而不仅仅是一个。

DeleteByQueryOperation 使您能够通过一次查询删除大量文档

对于 .Net 客户端
看: https://ravendb.net/docs/article-page/4.1/Csharp/client-api/operations/delete-by-query

例如: 要从 Name == Bob 使用 Person/ByName 索引的服务器中删除所有文档,请使用:

var operation = store
    .Operations
    .Send(new DeleteByQueryOperation<Person>("Person/ByName", x => x.Name == "Bob"));

对于节点客户端:
(取自测试的示例)

  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);
        }
    });