Firestore 查询:实现“AND”和“OR”逻辑

问题描述 投票:0回答:1

有没有办法查询userId匹配且文档当天开始或结束的文档?我知道 firestore 支持“OR”运算符,但我不确定是否正确实现了隐式“and”运算符

我正在努力实现这样的目标

let q = query(
        sessionsRef,
        (
            orderBy("createdAt"),
            where("user", "==", userId),
            or
                (
                    (
                        where("endedAt", ">=", Timestamp.fromDate(startOfDay)),
                        where("endedAt", "<=", Timestamp.fromDate(endOfDay))
                    ),
                    (
                        where("startedAt", ">=", Timestamp.fromDate(startOfDay)),
                        where("startedAt", "<=", Timestamp.fromDate(endOfDay))
                    )
                )
        )
    );

我不喜欢使用两个查询并合并结果,除非没有其他选择。使用两个查询的唯一问题是我会得到很多重复的数据

firebase google-cloud-firestore
1个回答
0
投票

如果您想在

and
条件内使用
or
条件,请在内部条件周围使用
and
函数

or(
    and(
        where("endedAt", ">=", Timestamp.fromDate(startOfDay)),
        where("endedAt", "<=", Timestamp.fromDate(endOfDay))
    ),
    and(
        where("startedAt", ">=", Timestamp.fromDate(startOfDay)),
        where("startedAt", "<=", Timestamp.fromDate(endOfDay))
    )
)
© www.soinside.com 2019 - 2024. All rights reserved.