有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java我可以设置多个。whereEqualTo在firestore查询中指向文档中的字段?

我有一个以city为字段的文档。我想查询一个有

city == "Tokyocity == "Osaka"

怎么做

我试过这个:

query = ref
            .whereEqualTo(FIRESTORE_EVENT_FIELD_CITY,"Tokyo")
            .whereEqualTo(FIRESTORE_EVENT_FIELD_CITY,"Osaka")
            .whereEqualTo(FIRESTORE_EVENT_FIELD_IS_ACTIVE,true)
            .whereEqualTo(FIRESTORE_EVENT_FIELD_HAS_BEEN_APPROVED,false)
            .whereGreaterThanOrEqualTo(FIRESTORE_EVENT_FIELD_DATE_START_TIME,now.toDate())

          .whereLessThanOrEqualTo(FIRESTORE_EVENT_FIELD_DATE_START_TIME,oneMonthFromNow.toDate())
            .orderBy(FIRESTORE_EVENT_FIELD_DATE_START_TIME, Query.Direction.ASCENDING)
            .limit(limit)

但如果我只设置了一个指向 一个城市,像这样只有.whereEqualTo(FIRESTORE_EVENT_FIELD_CITY,"Tokyo"),然后它工作,但它只给我所有的文件,在城市领域有东京


共 (2) 个答案

  1. # 1 楼答案

    从文件中:

    You can only perform range comparisons (<, <=, >, >=) on a single field, and you can include at most one array-contains or array-contains-any clause in a compound query

    https://firebase.google.com/docs/firestore/query-data/queries

    citiesRef.whereGreaterThanOrEqualTo("state", "CA")
            .whereLessThanOrEqualTo("state", "IN");
    citiesRef.whereEqualTo("state", "CA")
            .whereGreaterThan("population", 1000000);
    
  2. # 2 楼答案

    我猜你说你想要city == "Tokyo" and city == "Osaka"是指OR。Firestore最近发布了OR逻辑

    query = ref
            .whereIn(FIRESTORE_EVENT_FIELD_CITY,Arrays.asList("Tokyo", "Osaka"))
            .whereEqualTo(FIRESTORE_EVENT_FIELD_IS_ACTIVE,true)
            .whereEqualTo(FIRESTORE_EVENT_FIELD_HAS_BEEN_APPROVED,false)
     .whereGreaterThanOrEqualTo(FIRESTORE_EVENT_FIELD_DATE_START_TIME,now.toDate())
     .whereLessThanOrEqualTo(FIRESTORE_EVENT_FIELD_DATE_START_TIME,oneMonthFromNow.toDate())
            .orderBy(FIRESTORE_EVENT_FIELD_DATE_START_TIME, Query.Direction.ASCENDING)
            .limit(limit)
    

    在当前查询中,您没有收到任何文档,因为前两个where是互斥的