在React Native和Node.js中Realm是否有类似MongoDB findOne的API?
在Realm React Native/Node.js中实现类似MongoDB findOne的功能
好问题!我之前在项目里也纠结过这个点——Realm的React Native和Node.js SDK确实没有提供和MongoDB findOne()完全一致的内置API,不过你当前的写法其实是社区里最常用、也最可靠的实现方式。
不过我们可以把这个逻辑优化得更简洁顺手:
方式1:封装成复用函数
把取单条数据的逻辑封装成工具函数,方便在项目各处调用:
// 自定义findOne工具函数 const findOne = (realm, modelName, filterQuery, ...params) => { const matchedResults = realm.objects(modelName).filtered(filterQuery, ...params); return matchedResults.length ? matchedResults[0] : null; }; // 调用示例 const targetData = findOne(this.state.realm, 'ModelName', 'key_name = $0', key_value);
方式2:利用Realm Results的first()方法(Realm JS v10+)
如果你使用的是较新版本的Realm JS(v10及以上),结果集对象自带first()方法,可以直接获取第一条匹配的记录,为空时返回undefined,我们可以转成你需要的null:
const targetData = this.state.realm .objects('ModelName') .filtered('key_name = $0', key_value) .first() || null;
小提示:关于Realm结果的实时性
需要注意的是,Realm的查询结果是实时更新的集合,你拿到的第一个对象会自动同步后续的数据变化。如果需要静态的快照数据,可以用深拷贝的方式处理:
const staticData = targetData ? JSON.parse(JSON.stringify(targetData)) : null;
内容的提问来源于stack exchange,提问作者Mostafiz Rahman
相关产品推荐
相关产品推荐

