AtomicBoolean做什么,一个volatile布尔无法实现?
预期行为:我假设当文档的某个字段被修改时,查询只会返回该文档,因此它只会被视为 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 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.
Firestore 实时更新文档在这里
这是您可以在文档中找到的评论。
重要提示:第一个查询快照包含与查询匹配的所有现有文档的添加事件。这是因为您正在获得一组更改,这些更改使您的查询快照与查询的初始状态保持同步。例如,这允许您根据在第一个查询快照中收到的更改直接填充 UI,而无需添加用于处理初始状态的特殊逻辑。
我理解它是如何有用的,但在某些情况下它只会困扰我,我想知道是否有任何方法可以防止第一个查询快照触发侦听器。