我正在使用Realm JS应用React Native。我在模式中插入了一个值,如下所示。
const CarSchema = {
name: 'Car',
properties: {
model: 'string'
}
};
let realm = new Realm({schema: [CarSchema]});
realm.write(() => {
realm.create('Car', {
model: 'Ford'
});
});
let cars = realm.objects('Car');
console.log(cars);
在Chrome控制台中,我获得了以下对象,而不是数据库中的所有汽车。
我在这里错过了什么吗?
答案 0 :(得分:16)
这是Realm对象工作方式(以及列表和结果)的结果 - 而不是从数据库中保存数据并反序列化(可能)大量对象,Realm为您提供了延迟加载的对象和集合。 Realm.objects('Car')
不返回JavaScript数组,而是返回Results
对象 - 它的行为与数组完全相同,但它不是使用内置数组对象实现的。这就是为什么它看起来不像Chrome控制台中的一系列对象,即使它的行为相同。
但是,您可以急切地使用Array.from(realm.objects('Car'))
读取数组中的Realm集合,并在调试器中更好地可视化。
“代理”对象是Realm及其零拷贝哲学的基石。所有Realm SDK都以相同的方式实现 - 而不是通过序列化和反序列化的普通对象,您获得直接访问数据库的代理对象。
在realm-js中,实际的代理机制根据您的代码是在React Native,Node.js还是React Native Chrome调试器上运行而有所不同,因此这些代理的实现细节会有所不同。
所有这一切的问题在于它在JavaScript调试器中不能很好地显示。不幸的是,我不知道如何影响Chrome在调试器中显示对象的方式。
来源:我是一个领域的贡献者。
答案 1 :(得分:1)
代码看起来很好,我在项目中也使用了类似的片段
上图与上面显示的图像类似。
exanded版本应包含Car的所有对象。在我的情况下,属性在对象0下具有键和值。在您的情况下,它应该具有模型:"福特"在一个结果中。
答案 2 :(得分:0)
filtered
返回一个与javascript数组非常相似的Results对象。
所以你的代码应该是:(如果你想在consol中显示它)
var items = realm.objects('Item').filtered('id == $0', item_id);
var item = items[0];
console.log(item.name); // should print the name
答案 3 :(得分:0)
我的建议,请循环播放
for (let i = 0; i < items.length; i++) {
console.log('items[' + i + ']:', { ...items[i] })
}