CRUD — 更新 — Flutter SDK
Atlas Device SDK 已弃用。 有关详细信息,请参阅弃用页面。
更新到RealmObjects
必须在写事务(write transaction)中进行。有关写入事务的更多信息,请参阅:写入事务。
SDK 支持更新和更新更新或插入(upsert)操作。 更新或插入(upsert)或插入操作会插入对象的新实例,或更新符合特定条件的现有对象。 有关详细信息,请参阅本页上的“更新或插入对象”部分。
您无法更新非对称对象。 这是因为非对称对象是特殊的只写对象,不会持久保存到数据库中。 有关如何在应用程序中使用非对称对象的信息,请参阅将数据流式传输到 Atlas - Flutter SDK。
更新对象
本页上的示例使用两种对象类型:Person
和 Team
。
()class _Person { () late ObjectId id; late String name; late List<String> hobbies; } ()class _Team { () late ObjectId id; late String name; late List<_Person> crew; late RealmValue eventLog; }
更新对象属性
要修改对象的属性,请在写事务区块中更新属性。
realm.write(() { spaceshipTeam.name = 'Galactic Republic Scout Team'; spaceshipTeam.crew .addAll([Person(ObjectId(), 'Luke'), Person(ObjectId(), 'Leia')]); });
更新或插入对象
要更新或插入(upsert)或插入对象,请调用 Realm .add() update
true
并在ACID 事务区块内将可选的 标志设立为 。如果具有给定主键的对象不存在,则该操作将插入具有该主键键的新对象。如果已经存在具有该主键的对象,则该操作将更新该主键的现有对象。
final id = ObjectId(); // Add Anakin Skywalker to the realm with primary key `id` final anakin = Person( id, "Anakin Skywalker", ); realm.write(() { realm.add<Person>(anakin); }); // Overwrite the 'Anakin' Person object // with a new 'Darth Vader' object final darthVader = Person(id, 'Darth Vader'); realm.write(() { realm.add<Person>(darthVader, update: true); });