【问题标题】:Delete multiple documents of a particular collection matching a criteria in RavenDB删除与 RavenDB 中的条件匹配的特定集合的多个文档
【发布时间】:2019-09-25 21:52:04
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: node.js ravendb document-database


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-29
      • 1970-01-01
      • 2012-12-04
      • 1970-01-01
      相关资源
      最近更新 更多