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

LokiJS中$gte/$lte过滤条件失效问题求助

问题:LokiJS查询未生效,始终返回全部数据

我根据用户输入生成查询语句传递给LokiJS处理,但查询似乎未生效,始终返回全部数据。

查询生成逻辑

function prepareQueryFromOptions(options: GetAllTransactionsOptions) {
  const query: Record<string, any> = {
    timestamp: {
      "$gte": options.dateRange.from.getTime(),
      "$lte": options.dateRange.to.getTime(),
    },
  };
  if (options.accounts) {
    query.accountId = {
      "$in": options.accounts,
    };
  }
  if (options.categories) {
    query.category = {
      "$in": options.categories,
    };
  }

  return query;
}

查询使用方式

const query: Record<string, any> = prepareQueryFromOptions(options);

const transactions: Transaction[] = transactionsCollection.chain().find(query).simplesort('timestamp').data();

失败的测试用例

const AUG_1_2022 = new Date(2022, 7, 1);
const AUG_5_2022 = new Date(2022, 7, 5);
const AUG_12_2022 = new Date(2022, 7, 12);

it('getAllTransactions()', async () => {
    let txs1 = await transactions.getAllTransactions({
      dateRange: {
        from: AUG_1_2022,
        to: AUG_12_2022,
      },
    });
    expect(txs1.length).toBe(2); // 成功(返回两条交易记录)

    let txs = await transactions.getAllTransactions({
      dateRange: {
        from: AUG_1_2022,
        to: AUG_5_2022,
      },
    });
    expect(txs.length).toBe(1); // 失败,仍返回两条交易记录
  });

问题分析与解决方案

核心问题

大概率是查询条件的类型和存储字段的类型不匹配:
你的查询里用getTime()把Date转成了时间戳数值,但如果交易记录中的timestamp字段存储的是Date对象,LokiJS无法正确比较数值和Date类型,导致查询条件失效,直接返回所有数据。

解决办法

办法一:统一类型为Date对象

修改查询生成逻辑,直接传入Date对象而非时间戳:

function prepareQueryFromOptions(options: GetAllTransactionsOptions) {
  const query: Record<string, any> = {
    timestamp: {
      "$gte": options.dateRange.from, // 直接用Date对象
      "$lte": options.dateRange.to,
    },
  };
  // 其余逻辑不变...
}

办法二:统一类型为时间戳数值

如果你的交易记录timestamp确实存的是数值,那检查测试数据:

  • 确认第二条交易的时间戳是否真的大于AUG_5_2022.getTime(),有可能测试数据的时间设置错误(比如把8月5日之后的交易设成了当天)。
  • 可以在查询前打印query和交易记录的timestamp值,对比确认条件是否匹配。

内容的提问来源于stack exchange,提问作者Aman Desai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 12:10:50