删除与 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);
}
});
我正在尝试删除满足特定条件的特定集合中的多个文档。理想情况下,删除这些文档后我需要添加新文档。即使新文档已成功添加到集合中,但在删除时也只会删除一个文档。对正确方向的任何帮助表示赞赏。
我尝试了异步和等待的不同组合,但没有奏效。只是想让你知道,我对添加和删除调用使用相同的会话。下面是删除多个接受 '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);
}
});