Delete()
此操作通过过滤表达式或 ID 数组删除 Entity。
Status Delete(const DeleteRequest& request, DeleteResponse& response)
请求语法
auto request = DeleteRequest()
.WithDatabaseName(db_name)
.WithCollectionName(collection_name)
.WithPartitionName(partition_name)
.WithFilter(filter)
.WithFilterTemplates(value)
.WithIDs(id_array);
请求方法:
-
WithDatabaseName(const std::string& db_name)设置目标 Database 名称。若未指定,则使用默认 Database。
-
WithCollectionName(const std::string& collection_name)设置 Collection 名称。
-
WithPartitionName(const std::string& partition_name)设置 Partition 名称列表。若未指定,则使用默认 Partition。
-
WithFilter(const std::string& filter)设置过滤表达式。
-
AddFilterTemplate(std::string key, nlohmann::json&& filter_template)添加过滤模板。仅当设置了
WithFilter()时生效。有关过滤模板的详细信息,请参阅此页面。 -
WithFilterTemplates(std::unordered_map<std::string, nlohmann::json>&& filter_templates)设置过滤模板。仅当设置了
WithFilter()时生效。有关过滤模板的详细信息,请参阅此页面。 -
WithIDs(std::vector<int64_t>&& id_array)设置一组整数主键。仅当
WithFilter()为空时生效。
返回值:
包含 DeleteResponse 的 Status
检查 status.IsOk() 以确认操作是否成功。
DmlResults
此类用于承载数据变更操作(插入、upsert 或删除)的结果。可通过 Results() 在 InsertResponse、UpsertResponse 或 DeleteResponse 中访问。
const DmlResults& results = response.Results();
方法:
-
const IDArray& IdArray() const已插入、upsert 或删除的 Entity ID。对于自动 ID Collection,服务器会在插入后自动填充此字段。关于如何读取整数或字符串 ID,请参阅 IDArray。
-
uint64_t Timestamp() const服务端操作时间戳。可在后续的 search 或 query 调用中将其作为
guarantee_timestamp传入,以确保读己之写一致性。 -
uint64_t InsertCount() const已插入的行数。适用于
InsertResponse和UpsertResponse。 -
uint64_t DeleteCount() const已删除的行数。适用于
DeleteResponse和UpsertResponse。 -
uint64_t UpsertCount() const已 upsert 的行数(新增插入或替换已有记录)。适用于
UpsertResponse。
异常:
-
StatusCode
检查
status.Code()和status.Message()以获取错误详情。
示例
#include "milvus/MilvusClientV2.h"
auto client = milvus::MilvusClientV2::Create();
milvus::ConnectParam connect_param{"YOUR_CLUSTER_ENDPOINT", "YOUR_CLUSTER_TOKEN"};
auto status = client->Connect(connect_param);
if (!status.IsOk()) {
std::cout << status.Message() << std::endl;
}
milvus::DeleteResponse resp_delete;
status = client->Delete(milvus::DeleteRequest()
.WithCollectionName(collection_name)
.WithPartitionName(partition_name)
.WithFilter(field_id + "== 5"),
resp_delete);
if (!status.IsOk()) {
std::cout << status.Message() << std::endl;
}