在Firestore中按ID获取多个文档

时间:2018-03-18 11:21:47

标签: firebase kotlin google-cloud-firestore

我目前正在使用新的Firestore作为后端/数据库对Android应用进行概念验证。我需要通过他们的id获取一堆文档(它们都在同一个集合中)

现在,我通过id列表循环并逐个获取它们并将它们存储在列表中,然后列表会更新应用程序中的RecycleView。这似乎是很多工作,并没有很好的表现。

从Firestore获取文档列表的正确方法是什么,而不必循环所有ID并逐个获取它们?

现在我的代码看起来像这样

   for (id in ids) {
        FirebaseFirestore.getInstance().collection("test_collection").whereEqualTo(FieldPath.documentId(), id)
                .get()
                .addOnCompleteListener {
                    if (it.isSuccessful) {
                        val res = it.result.map { it.toObject(Test::class.java) }.firstOrNull()

                        if (res != null) {
                            testList.add(res)
                            notifyDataSetChanged()
                        }

                    } else {
                        Log.w(TAG, "Error getting documents.", it.exception)
                    }
                }
    }

2 个答案:

答案 0 :(得分:3)

Firestore目前不支持ID查询。

根据AngularFirebase,这是未来发展的路线图,但不是官方的:

  

请记住,Firestore仍处于测试阶段。 Firebase工程师在路线图上暗示了一些非常酷的功能(地理查询,按ID数组查询) - 我一定会告诉您:)

答案 1 :(得分:3)

这是我使用的方式,直到他们将添加此选项

如果您使用react或vue,我使用AngularFire2以及rxfire库进行了相同的设置。 您可以先映射空项目,然后再订阅是否删除了某些文档。

const col = this.fire.db.collection('TestCol');
const ids = ['a1', 'a2', 'a3', 'a4'];

const queries = ids.map(el => col.doc(el).valueChanges());
const combo = combineLatest(...queries)
      .subscribe(console.log)