我们可以在JavaScript SDK(客户端或管理员(上很好地运行null不等式,但我们不能在PHP中运行?对我来说,这似乎是Firestore已经支持的后端功能,但在PHP中引发了一个错误。
->where('preorders', '!=', null)
Uncaught InvalidArgumentException: Null and NaN are allowed only with operator EQUALS.
而JS SDK中的等效程序运行得很好。
query(q, where('preorders', '!=', null))
既然我不能在这里打开谷歌的PHP SDK回购中的问题,我们有什么办法可以找到为什么这不可能的原因吗?
文档中写道:
当字段设置为任何值时,它都存在,包括空的string (" ")
、null
和NaN
(不是数字(。请注意,空字段值与!=
子句不匹配,因为x != null
的计算结果为未定义。
解释:是的,即使我们添加了空字符串、null(Firestore
中支持的数据类型(或NaN,也不意味着该字段不存在。它确实存在并持有其中一种价值观。当我们比较where
子句中的x != null
时,x != null
的计算结果是未定义的,但对于不存在的字段。根据Firestore支持的数据类型,未定义的数据类型在Firestore中不受支持
因此,我们可以比较.where(x!=null)
,它是受支持的,但对于不存在的字段,它的计算结果为未定义。
正如在类似的线程中所提到的,Firestore JS SDK中的版本7.21.0支持版本7.21.0中带有where
子句的!=
运算符
但在深入研究文档时,我发现php5支持!=
运算符,正如您在代码片段中看到的那样,但是php8还不支持CCD_ 15运算符,解决方法是使用CCD_
也许您正在尝试使用php版本>5,从而产生误差。在GitHub中已经有一个悬而未决的问题。您可以按照链接进行更新和更改,也可以在此处创建新的请求。