React Native中如何从Realm仅获取指定列?附现有代码及预期输出
如何在React Native的Realm中仅获取特定列的数据
嘿,刚好我之前也碰到过这个需求!Realm本身的查询API确实不会直接返回仅包含特定字段的结果——因为它返回的是实时绑定的Realm对象实例,不是普通的JavaScript对象,所以没法直接让它只返回某几列。不过我们可以通过简单的数据转换来实现你要的效果。
具体实现步骤
首先,你还是用原来的查询语句获取结果,然后把结果转换成普通JS对象,再提取你需要的字段:
方法1:用map + reduce 快速转换
// 先执行你的查询,拿到Realm Results对象 const queryResults = DBHelper.realm.objects(DBHelper.Test).filtered('Id == $0', 1); // 把Realm Results转成普通数组,再提取test1字段 const test1Array = Array.from(queryResults).map(item => ({ test1: item.test1 })); // 如果需要转换成你期望的带索引键的对象格式 const test1Object = test1Array.reduce((result, currentItem, index) => { result[index] = currentItem; return result; }, {}); console.log(test1Object); // 输出就是你要的:{ "0": { "test1": 1 }, "1": { "test1": 2 } }
方法2:用forEach 遍历构建对象
如果你觉得reduce有点绕,用forEach更直观:
const queryResults = DBHelper.realm.objects(DBHelper.Test).filtered('Id == $0', 1); const test1Object = {}; queryResults.forEach((item, index) => { // 只提取需要的test1字段 test1Object[index] = { test1: item.test1 }; });
额外说明
- Realm对象是延迟加载的:当你只访问
item.test1时,它只会从数据库读取这个字段的值,不会把整个对象的所有数据都加载到内存里,所以不用担心性能问题。 - Realm没有类似SQL的
SELECT 特定列语法:它的设计就是返回完整的模型实例,所以提取特定字段只能靠我们手动转换。
内容的提问来源于stack exchange,提问作者Drim
相关产品推荐
相关产品推荐

