You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:54:55