相关疑难解决方法(0)

224
推荐指数
11
解决办法
9万
查看次数

Firestore 查询再次读取所有文档(从数据库中),即使启用了持久性也只修改了一个

预期行为:我假设当文档的某个字段被修改时,查询只会返回该文档,因此它只会被视为 1 次读取。假设我查询一个包含 n 个文档的集合,我希望它的初始状态为 n 次读取,如果稍后修改文档,则只会从数据库中再次读取该文档,从而总共读取 n+1 次。

我看到的 是最初读取 n 次,每当修改一个文档时 n 次读取,无论是否启用离线持久性;导致 2n 次读取所有“ fromCache : false ”元数据。

  myCollection: 
         doc1 : 
              value: "some string"
         ...
         docn: 
             value: "some text" 
Run Code Online (Sandbox Code Playgroud)

后来我通过控制台更改了一个文档的值:

     myCollection: 
         doc1 : 
              value: "changed to other value"
         ...
         docn: 
             value: "some text" 
Run Code Online (Sandbox Code Playgroud)

但是我在查询的快照中再次获得了所有 n 个文档。尽管我可以使用“s.docChanges”观察更改,但快照似乎包含所有 n 个文档。

  const someCollectionRef = firebase.firestore().collection("collection/document/subdocl??lection"); 
  someCollectionRef.onSnapshot(s => {

      var d = [];
      s.forEach(doc => {

           d.push(doc.data()));

           //fromCache is always false even when one document is …
Run Code Online (Sandbox Code Playgroud)

firebase google-cloud-firestore

9
推荐指数
1
解决办法
4017
查看次数

Firebase Firestore上的ServerTimestamp始终为null

我正在尝试使用Firebase Firestore在Android客户端中添加时间戳字段.

根据文件:

用于标记要使用服务器时间戳填充的日期字段的注释.如果正在编写的POJO对于@ ServerTimestamp-annotated字段包含null,则它将替换为服务器生成的时间戳.

但是当我尝试时:

@ServerTimestamp
Date serverTime = null; // I tried both java.util.Date and java.sql.Date

//...

Map<String, Object> msg = new HashMap<>();
// ... more data
msg.put("timestamp", serverTime);
Run Code Online (Sandbox Code Playgroud)

在Cloud Firestore数据库中,此字段始终为null.

java android firebase google-cloud-firestore

8
推荐指数
2
解决办法
3423
查看次数

添加snapshotListener时禁用第一个查询快照

Firestore 实时更新文档在这里

这是您可以在文档中找到的评论。

重要提示:第​​一个查询快照包含与查询匹配的所有现有文档的添加事件。这是因为您正在获得一组更改,这些更改使您的查询快照与查询的初始状态保持同步。例如,这允许您根据在第一个查询快照中收到的更改直接填充 UI,而无需添加用于处理初始状态的特殊逻辑。

我理解它是如何有用的,但在某些情况下它只会困扰我,我想知道是否有任何方法可以防止第一个查询快照触发侦听器。

android listener firebase google-cloud-firestore

2
推荐指数
1
解决办法
975
查看次数