所以我对firebase有点陌生,并且我正在开发一个android应用程序。我想做的是:我想创建一个在后台运行的服务,该服务可以侦听Firestore中的整个集合(例如“消息”),一旦将文档添加到集合中,我想检查文档是否包含特定值,以及是否确实推送通知。伪代码的概述:
messages.attachlistener(onNewDocument(doc) -> {
if(doc.getString(username) == my_username)
{
send_notification(doc.getString(message));
cache_message_for_later();
delete_doc_from_table();
}
};
我的问题是这样的: 是否可以将侦听器附加到集合?我只在文档中找到文档侦听器。如果可能的话,这样的监听器在性能上是否可行? (我的想法:此服务将始终在后台运行,但是文档在缓存后会被删除,因此表的大小不会太大并且可以平衡吗?)
答案 0 :(得分:2)
您可以将侦听器同时附加到DocumentReference和Query上。从API文档中可以看出,事实证明CollectionReference是Query的子类,这意味着您可以add a listener到CollectionReference就好了。以此方式作为查询的CollectionReference将为您提供该集合中的所有文档,然后为该集合中的任何文档提供所有更改,就像您在documentation中看到的一样(除非您没有使用任何where子句)。
答案 1 :(得分:0)
我对代码进行了快速检查以确认。
您可以执行这样的代码,而不会出现问题:
val db = FirebaseFirestore.getInstance()
val query = db.collection("Quotes_historyfavorites").document(userId)
.collection(FireBaseConstants.QuoteCollection.FAVORITE)
.orderBy("Added", Query.Direction.DESCENDING)
我不确定是否可以进行顶级收藏,但我相信您会在遇到性能问题之前面临金钱问题。