在使用equalTo(value, key)
时,我尝试使用orderByPriority()
的第二个参数,documented here。
问题是当使用第二个key
参数时结果不一致。
示例数据集
items
key1
key2
key3
key4
所有项目具有相同的优先级:10(这仅用于示例,在我的应用中还有其他项目具有其他优先级)
发出以下Firebase查询以获取具有该优先级的前两个项目时:
dbRef.child('items').orderByPriority().equalTo(10).limitToFirst(2)
我得到以下 - 预期 - 结果:
{ "key1": ..., "key2": ... }
然后我尝试在key2
项之后得到结果,如文档中所述:
dbRef.child('items').orderByPriority().equalTo(10, 'key2').limitToFirst(2)
结果非常奇怪,总是只有一个项目,即提供密钥的项目:
{ "key2": ... }
我所期待的是两个结果从开始,在提供的密钥后开始,所以
{ "key2": ..., "key3": ... }
或者
{ "key3": ..., "key4": ... }
问题
我应该如何使用equalTo()
过滤器及其第二个参数?
似乎这个问题是already asked,但它没有得到任何答案......
答案 0 :(得分:1)
equalTo()过滤器只会获取与指定键完全匹配的项。如果您想从'key2'开始并在此之后获得多个,请使用startAt()过滤器。但是,您不能在同一查询中使用多个orderBy语句,因此您可能需要重新格式化代码。我建议您按所需的优先级保存项目。然后,您可以使用startAt()过滤器查询该组项目。下面是一个数据集:
items10
key1
key2
items9
key1
key2
在startAt()过滤器中,指定起始键,然后它将查询具有相同或更大值的任何键。以下是此功能文档的链接:startAt()。
使用此方法,limitToFirst(2)应该为您提供key2和key3。这是一个代码示例,使用优先级10。
dbRef.child('items10').orderByKey().startAt('key2').limitToFirst(2)
注意:您可能还需要抓住一个元素,而不知道它的优先级。为此,创建另一个名为仅包含所有键的项的键(您不会将其用于查询)。