Search code examples
react-nativerealmrealm-mobile-platform

Realm React Native: How remove element from object's nested array with some condition


I am new in React native and trying to integrate Realm as a client side DB. I have 2 schemas:

export const CAR_SCHEMA = {
  name: 'Car',
  properties: {
    color: 'string',
    model: 'string',
  }
};

export const PERSONS_SCHEMA = {
  name: 'Person',
  primaryKey: 'id',
  properties: {
    id: 'int',
    firstName: 'string',
    lastName: 'string'
    cars: 'Cars[]'
  }
};

My question basically means how to remove 'Car' from 'Person' where Car.model='Honda'? I couldn't find any documentation about deleting element from object's nested array.


Solution

  • Remove from array but keep item in Realm:

    realm.write(() => {
        let person = realm.objectForPrimaryKey('person', personId);
        let carsOfPerson = person.cars;
    
        var i = carsOfPerson.length - 1;
        while(i >= 0) {
            if(carsOfPerson[i].model == "Honda") {
                carsOfPerson.splice(i, 1);
            }
            i--;
        }
    });
    

    Remove from array by deleting item from Realm:

    realm.write(() => {
        let person = realm.objectForPrimaryKey('person', personId);
        let carsOfPerson = person.cars;
        let hondasOfPerson = carsOfPerson.filtered('model = "HONDA"')
        realm.delete(hondasOfPerson)
    });