在Realm中更新数组对象

时间:2017-07-13 08:24:26

标签: javascript arrays react-native realm updates

我有一个领域组织和票证。一个组织有很多票。所以要更新组织,它看起来像这样:

    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函数返回一个对象数组。这将适用于我的初始写作。但是如果我想更新数组,我想向数组中添加对象但不会覆盖整个数组。如何在不获取当前值,将其附加到新值并将其返回到对象的情况下执行此操作?这似乎太慢了。

1 个答案:

答案 0 :(得分:2)

create()true参数一起使用时,您将覆盖现有对象的属性。您想要的是修改现有数据。

要做到这一点,你必须以某种方式引用原始数组。您可以将新的Ticketpush()迭代到数组中,或者在现有数组上使用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并不是一项昂贵的操作。