当Android中数组中的值大于1时,Firestore whereArrayContains无法正常工作

时间:2019-11-05 22:25:53

标签: android arrays firebase google-cloud-firestore

我有一个Firestore文档“用户”,其数组字段为“语言”和“国家”。每个用户都会使用几种语言,因此对于一个用户来说,是

user1,

   languages: english, spanish, italian
   country: "UK"
user2,
   languages: english
   country: "UK"

enter image description here enter image description here

我的查询如下:

   query = db.collection("users");
   query = query.whereEqualTo("country", "UK");
   query = query.whereArrayContains("languages", "English");
query.addSnapshotListener(new EventListener<QuerySnapshot>() {
        @Override
        public void onEvent(@NonNull QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {
            if (e != null) {
                return;
            }
            if (queryDocumentSnapshots != null) {
                List<DocumentSnapshot> snapshotList = queryDocumentSnapshots.getDocuments();

                for (DocumentSnapshot document : snapshotList) {
 String country= document.getString("country");
     Log.wtf(TAG, country);
    }
 } else {
                Log.d(TAG, "Error getting documents: ");
            }
        }
    });

结果仅返回“ user2”的数据,因为它在数组语言中只有一个字段。 Althoug“ user1”也具有英语作为语言值,因此不会返回该用户的数据。

我在做什么错了?

enter image description here enter image description here

1 个答案:

答案 0 :(得分:0)

你需要像这样添加一个索引:

  • 国家 - 升序
  • 语言 - 数组

  1. 转到索引

enter image description here

  1. 完全像这样添加一个新索引:

enter image description here