gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 22:57:40 25 4
gpt4 key购买 nike

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

我尝试了异步和等待的不同组合,但没有成功。只是为了让您知道,我使用同一个 session 来进行添加和删除调用。下面是删除多个文档的方法,接受“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

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

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

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

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

关于node.js - 删除与 RavenDB 中的条件匹配的特定集合的多个文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56036062/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com