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

如何在Supabase中筛选notes表archived列为false或null的行

解决Supabase筛选bool列为false或null的问题

需求

筛选notes表中archived列值为false或null的行,该列类型为bool。

尝试过的无效写法

以下是我尝试过但无法得到正确结果的代码:

Future<List<Cost>> getUnArchivedCosts() async {
    final dataCost = await supabaseInstance
        .from('notes') 
        .select<List<Map<String, dynamic>>>()
        // .is_('archived', null); // 单独使用生效
        // .is_('archived', false); // 单独使用生效

        // .eq('archived', 'false'); // 生效,但用字符串匹配bool不严谨
        // .eq('archived', 'null'); // 无效
        // .or('archived.is_.false,archived.is_.null'); // 无效

        // .not('archived', 'eq', 'true'); // 无效,会忽略null行
        // .not('archived', 'is_', 'true'); // 无效
        .or('archived.eq.false,archived.eq.null'); // 无效
}

正确解决方案

方案1:使用or结合is_操作符

正确的or过滤器语法需要明确使用is_操作符匹配null和false,代码如下:

Future<List<Cost>> getUnArchivedCosts() async {
    final dataCost = await supabaseInstance
        .from('notes') 
        .select<List<Map<String, dynamic>>>()
        .or('archived.is_.false,archived.is_.null');
    return dataCost.map((e) => Cost.fromJson(e)).toList();
}

方案2:使用not匹配非true值

利用PostgreSQL的逻辑特性,null != true的判断结果为true,因此可以直接筛选archived不为true的行,同时覆盖false和null的情况:

Future<List<Cost>> getUnArchivedCosts() async {
    final dataCost = await supabaseInstance
        .from('notes') 
        .select<List<Map<String, dynamic>>>()
        .not('archived', 'eq', true);
    return dataCost.map((e) => Cost.fromJson(e)).toList();
}

文档错误说明

Supabase文档中提到的.isFilter方法不存在,实际代码中需使用.is_方法来匹配null或特定值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 13:30:01