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

时间:2019-05-08 07:58:26

标签: node.js ravendb document-database

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

我尝试了async和await的不同组合,但是没有用。只是让您知道,我在添加和删除调用中都使用了相同的会话。下面是删除多个以“ session”作为参数的文档的方法。

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

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

1 个答案:

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