Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何查询三个值,其中两个值在Cloud Firestore中包含一个范围(Cloud_Firestore:^0.13.4+;2)_Flutter_Google Cloud Firestore - Fatal编程技术网

Flutter 如何查询三个值,其中两个值在Cloud Firestore中包含一个范围(Cloud_Firestore:^0.13.4+;2)

Flutter 如何查询三个值,其中两个值在Cloud Firestore中包含一个范围(Cloud_Firestore:^0.13.4+;2),flutter,google-cloud-firestore,Flutter,Google Cloud Firestore,我正在编写一个应用程序,其中一个用户可以根据以下标准筛选其他用户:范围内的年龄、范围内的体重和排名 我的问题是,只过滤了列出的值中的一个。A.where.where.where链接可能不起作用,at表示应该使用WHEREQUALTO命令。但是,我的IDE无法识别此命令 有人知道我怎么能写出这样的疑问吗?我没有列出代码示例,因为我希望有一个通用方法。我在网上找不到关于它的任何东西 提前感谢您的帮助 这是我的代码: query() { if (currentUser.rank == 'Gold')

我正在编写一个应用程序,其中一个用户可以根据以下标准筛选其他用户:范围内的年龄、范围内的体重和排名

我的问题是,只过滤了列出的值中的一个。A.where.where.where链接可能不起作用,at表示应该使用WHEREQUALTO命令。但是,我的IDE无法识别此命令

有人知道我怎么能写出这样的疑问吗?我没有列出代码示例,因为我希望有一个通用方法。我在网上找不到关于它的任何东西

提前感谢您的帮助

这是我的代码:

query() {
if (currentUser.rank == 'Gold') {
  return docRef
      .where('Rank', isEqualTo: 'Gold')
      .where('age',
          isGreaterThanOrEqualTo: int.parse(currentUser.ageRange['min']))
      .where('age',
          isLessThanOrEqualTo: int.parse(currentUser.ageRange['max']))
      .orderBy('age', descending: false);
} else if (currentUser.rank == 'Silver') {
  return docRef
      .where('Rank', isEqualTo: 'Silver')
      .where('age',
          isGreaterThanOrEqualTo: int.parse(currentUser.ageRange['min']))
      .where('age',
          isLessThanOrEqualTo: int.parse(currentUser.ageRange['max']))
      .orderBy('age', descending: false);
} else if (currentUser.rank == 'Bronze') {
  return docRef
      .where('Rank', isEqualTo: 'Bronze')
      .where('age',
          isGreaterThanOrEqualTo: int.parse(currentUser.ageRange['min']))
      .where('age',
          isLessThanOrEqualTo: int.parse(currentUser.ageRange['max']))
      .orderBy('age', descending: false);
}
}

如果没有看到代码示例,就很难给出正确的解决方案。但是阅读上面包含的链接时,不同字段上不能有范围过滤器。这听起来像是你想要做的。这是由于Firestore数据库的限制。您必须找到另一种只使用相等运算符进行过滤的方法。或者一个相等过滤器和一个范围过滤器的组合(如下所示)

更简单的方法是在从数据库获得结果后,在客户端进行过滤,在flift(客户端)中过滤结果。不过要小心,这可能会导致更多数据从Firestore传输到Firestore,这可能会让您花费更多的云计算费用

您可以在Firestore查询中进行尽可能多的筛选:

var result = firestoreInstance
  .collection("users")
  .where("rank", isEqualTo: "1")
  .where("age", isGreaterThan: 40)
  .get();
颤振/客户端:

var resultsFilteredByWeight = result.docs.where((result) => result.weight >= 100 && result.weight <= 150);

var resultsFilteredByWeight=result.docs.where((结果)=>result.weight>=100&&result.weight如果看不到代码示例,就有点难给出正确的解决方案。但是阅读上面包含的链接,您不能在不同的字段上设置范围过滤器。听起来您好像在尝试这样做。这是由于Firestore数据库的限制。您必须找到另一种方法只使用相等运算符进行筛选。或者使用1个相等筛选器和1个范围筛选器的组合(如下所示)

更简单的方法是在从数据库获得结果后在客户端进行过滤,然后在flift(客户端)中过滤结果。不过要小心,这可能会导致更多的数据从Firestore传输到Firestore,这可能会让您花费更多的云费用

您可以在Firestore查询中进行尽可能多的筛选:

var result = firestoreInstance
  .collection("users")
  .where("rank", isEqualTo: "1")
  .where("age", isGreaterThan: 40)
  .get();
颤振/客户端:

var resultsFilteredByWeight = result.docs.where((result) => result.weight >= 100 && result.weight <= 150);

var resultsFilteredByWeight=result.docs.where((结果)=>result.weight>=100&&result.weight我找到了解决方案。对于所有在Firestore中有查询问题的人,IDE,例如Android Studio或Xcode,在运行中显示由您的查询引起的错误。在我的情况下,Cloud Firestore中没有激活多索引方法,因此当然没有向我显示任何内容。要做到这一点,您只需点击RUN中显示的链接,您将被直接重定向到Firestore,Firestore将为您进行必要的更改,非常方便用户!我还使用我的原始代码再次测试了它,它所说的内容与jaredbaszler所说的相同。两个不同值中的范围查询​​不可能。但是,可以在一个值中执行范围查询并将其链接到另一个值查询(与.where.where.where的简单连接)。我还没有测试过有多少其他值​​可以链接,但另一个没有问题。我认为有可能添加更多。我希望我能够帮助其他有问题的人。再次感谢@jaredbaszler为我提供了解决问题的正确心态!:)

我找到了解决方案。对于所有在Firestore中有查询问题的人,IDE(例如Android Studio或Xcode)会在运行中显示由您的查询导致的错误。在我的情况下,Cloud Firestore中没有激活多索引方法,因此当然没有向我显示任何内容。要执行此操作,您只需单击on在RUN中显示的链接,您将直接重定向到Firestore,Firestore将为您进行必要的更改,非常友好!我还使用我的原始代码再次测试了它,它所说的内容与jaredbaszler已经说过的内容相同。两个不同值中的范围查询​​不可能。但是,可以在一个值中执行范围查询并将其链接到另一个值查询(与.where.where.where的简单连接)。我还没有测试过有多少其他值​​可以链接,但另一个没有问题。我认为有可能添加更多。我希望我能够帮助其他有问题的人。再次,非常感谢@jaredbaszler为我提供了解决问题的正确心态!:)

谢谢@jaredbaszler,这对我有一点帮助,了解firestore中的查询选项!我在问题中添加了我使用的代码。请你看一下,告诉我,我能做些什么当然,只需同时查询排名和年龄。我明白你的意思,firestore不支持按范围查询不同的值。但我认为我的where-where方法不是正确的方法,因为当我编译这个时,它不会显示错误,但不会在应用程序中显示任何内容…:(基于上面的代码,您仍然在两个不同的字段上按
范围
进行查询。您不能在
年龄
权重
字段上使用
大于或等于
。您只需在一个字段上使用它,然后在客户端过滤另一个字段,就像我上面解释的那样。您不会得到任何编译时错误。)这只是Firestore的局限性。是的,我理解你告诉我的。但我的问题是,即使我只是查询排名和年龄范围,什么可能会起作用,导致不会显示任何信息。我更改了代码,只允许