如何在javascript中修改realm中的现有记录

abd*_*dul 3 javascript realm react-native

我想更新特定模式的现有数据中的值

class Car {}
Car.schema = {
  name: 'Car',
  properties: {
    make:  'string',
  }
};
let realm = new Realm({schema: [Car,]});
realm.write(() => {
  let myCar = realm.create('Car', {
    make: 'Ford',
    model: 'Focus',
    miles: 2000,
  });
});
realm.write(() => {
  let myCar = realm.create('Car', {
    make: 'Ford',
    model: 'Focus',
    miles: 2000,
  });
});
realm.write(() => {
  let myCar = realm.create('Car', {
    model: 'Focus',
  });
})
Run Code Online (Sandbox Code Playgroud)

现在,如果我想从多个记录中更新此“模型”属性,我该怎么做。

jas*_*ino 5

要更新多个记录的属性,您需要从领域获取记录,然后循环遍历它们以进行更改。因此,在所有写入之后(确保回调函数已经运行),您将执行类似的操作。

const cars = realm.objects('Car');
realm.write(() => {
  cars.forEach(car => {
    // apply your changes to car here
    car.model = 'Some New Model';
  });
});
Run Code Online (Sandbox Code Playgroud)

需要注意的是,由于这些写入发生在回调函数中,因此您需要确保此代码在示例中编写的回调完成后运行。

另外,我假设realm.write上面的三个单独的方法仅作为示例,但如果您需要一次将多个内容写入领域,请确保将所有写入合并为一个(realm.write如果可能)。通过上面的几个调用,不会出现任何明显的性能问题,但是当您尝试一次写入数百个调用时,您将遇到相当严重的瓶颈。

另一方面,如果您正在寻找一种简单的方法来管理监听领域数据的变化,我建议您看看react-native-realm全面披露:这是我编写的一个库,但我发现它很有帮助,因为不必记住在每个组件安装和卸载时连接和拆卸事件侦听器。