我有一个领域组织和票证。一个组织有很多票。所以要更新组织,它看起来像这样:
try {
realm.write(() => {
realm.create('Organization', {
id: organization.id,
name: organization.name,
ticket: downloadTickets(organization.id)
}
, true)
})
console.log("inserting/updating ogranization")
} catch(err) {
console.warn(err)
}
downloadTickets
函数返回一个对象数组。这将适用于我的初始写作。但是如果我想更新数组,我想向数组中添加对象但不会覆盖整个数组。如何在不获取当前值,将其附加到新值并将其返回到对象的情况下执行此操作?这似乎太慢了。
答案 0 :(得分:2)
将create()
与true
参数一起使用时,您将覆盖现有对象的属性。您想要的是修改现有数据。
要做到这一点,你必须以某种方式引用原始数组。您可以将新的Ticket
和push()
迭代到数组中,或者在现有数组上使用concat()
并传入新数组。
try {
realm.write(() => {
var org = realm.create('Organization', {
id: organization.id,
name: organization.name
}
, true)
// Do this
var newTickets = downloadTickets(organization.id);
for(var i = 0; i < newTickets.length; i++) {
org.ticket.push(newTickets[i]);
}
// or this
org.ticket = org.ticket.concat(downloadTickets(organization.id));
})
console.log("inserting/updating ogranization")
} catch(err) {
console.warn(err)
}
作为旁注:引用数组不会将整个内容加载到内存中。在您明确访问它之前,阵列的实际数据仅在磁盘上,然后Realm从磁盘读取它。访问数组以添加新的Ticket
并不是一项昂贵的操作。