Docs Menu
Docs Home
/ /
Atlas Device SDK
/ /

CRUD - 삭제 - C++ SDK

이 페이지의 내용

  • Realm 객체 삭제
  • 객체 삭제
  • 역관계 삭제
  • 맵 키/값 삭제
  • 설정된 값 삭제

Realm 객체 삭제는 쓰기 트랜잭션(write transaction) 내에서 이루어져야 합니다. 쓰기 트랜잭션(write transaction)에 대한 자세한 내용은 쓰기 트랜잭션(write transaction)을 참조하세요 .

영역 에서 객체 를 삭제 하려면 객체 를 Realm 으로 전달합니다.쓰기 트랜잭션( 쓰기 트랜잭션 (write transaction) ) 내에서() 함수를 제거 합니다.

realm.write([&] { realm.remove(managedDog); });

역관계는 직접 삭제할 수 없습니다. 대신 관련 객체를 통해 관계를 제거하여 역관계가 자동으로 업데이트됩니다.

이 예제에서 PersonDog 와 대일 관계를 갖고, DogPerson 와 역관계를 갖습니다. 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);

돌아가기

Update