LokiJS查询:如何找出authors数组中name匹配/m Sha/的记录?
解决LokiJS中数组嵌套字段的正则查询问题
我之前在使用LokiJS处理嵌套数组查询时也踩过类似的坑,你当前的查询写法无效,是因为LokiJS需要明确指定如何匹配数组内的对象元素,直接嵌套对象的方式不会触发数组元素的遍历检查。下面给你两种可行的解决方案:
方案1:使用$elemMatch操作符
这是LokiJS官方推荐的针对数组内对象字段的查询方式,它会告诉数据库去遍历authors数组,检查是否存在满足条件的元素:
const results = coll.find({ 'authors': { '$elemMatch': { 'name': { '$regex': /m Sha/ } } } });
只要数组中有任意一个元素的name字段匹配/m Sha/正则,这条记录就会被纳入结果集。
方案2:使用自定义过滤函数
如果需要更灵活的逻辑(比如多条件组合),直接用JavaScript的数组方法写过滤函数反而更直观:
const results = coll.find(doc => { // 遍历authors数组,检查是否有匹配的name return doc.authors.some(author => /m Sha/.test(author.name)); });
这里利用Array.some()方法,只要数组中存在符合条件的元素就返回true,对应的文档会被筛选出来。
额外提示
- 如果你使用的是较旧版本的LokiJS,建议确认是否支持
$regex操作符(新版本都已支持); - 如果需要用字符串形式的正则表达式(比如
"m Sha"),可以搭配$options指定匹配规则,比如{ '$regex': 'm Sha', '$options': 'i' }表示忽略大小写。
内容的提问来源于stack exchange,提问作者punkish
相关产品推荐
相关产品推荐

