CRUD - 删除 - C++ SDK
Atlas Device SDK 已弃用。 有关详细信息,请参阅弃用页面。
删除 Realm 对象
删除 Realm 对象必须在写事务(write transaction)中进行。有关写入事务的更多信息,请参阅:写事务(write transaction)。
删除对象
要从域中删除对象,请将该对象传递给 Realm 。 写事务(write transaction)中使用 删除 () 函数 。
realm.write([&] { realm.remove(managedDog); });
删除反向关系
不能直接删除反向关系。 相反,反向关系会通过相关对象删除关系来自动更新。
在此示例中, Person
与Dog
为一对一关系, Dog
与Person
为反向关系。 将Person.dog
关系设置为nullptr
会删除Dog
对象中的反向关系。
auto config = realm::db_config(); auto realm = realm::db(std::move(config)); auto dog = realm::Dog{.name = "Wishbone"}; auto [joe] = realm.write([&realm]() { auto person = realm::Person{.name = "Joe", .age = 27, .dog = nullptr}; return realm.insert(std::move(person)); }); // Assign an object with an inverse relationship // to automatically set the value of the inverse relationship realm.write([&dog, joe = &joe]() { joe->dog = &dog; }); CHECK(joe.dog->owners.size() == 1); // ... Later ... // Removing the relationship from the parent object // automatically updates the inverse relationship realm.write([joe = &joe]() { joe->dog = nullptr; }); CHECK(realm.objects<realm::Dog>()[0].owners.size() == 0);
模型
此示例使用以下模型:
struct Dog; struct Person { realm::primary_key<int64_t> _id; std::string name; int64_t age = 0; Dog* dog; }; REALM_SCHEMA(Person, _id, name, age, dog) struct Dog { realm::primary_key<int64_t> _id; std::string name; int64_t age = 0; linking_objects<&Person::dog> owners; }; REALM_SCHEMA(Dog, _id, name, age, owners)
删除映射键/值
要删除映射键,请将键名称传递给erase()
:
realm.write([&] { tommy.locationByDay.erase("Tuesday"); });
删除设置值
您可以使用erase()
删除设立元素,或使用clear()
删除设立中的所有元素。
// Remove an element from the set with erase() auto it3064 = managedDocsRealm.openPullRequestNumbers.find(3064); CHECK(it3064 != managedDocsRealm.openPullRequestNumbers.end()); realm.write([&] { managedDocsRealm.openPullRequestNumbers.erase(it3065); }); CHECK(managedDocsRealm.openPullRequestNumbers.size() == 4); // Clear the entire contents of the set realm.write([&] { managedDocsRealm.openPullRequestNumbers.clear(); }); CHECK(managedDocsRealm.openPullRequestNumbers.size() == 0);