Firestore - 将服务器时间戳字段添加到要添加的对象

Tal*_*rda 12 java android firebase google-cloud-firestore

我有一个Challenge对象,它有自己的属性,我可以像这样成功地将它添加到数据库:

DocumentReference challengeRef=usersRef.document(loggedUserEmail).collection("challenges_feed").
                document(callengeID);
challengeRef.set(currentChallenge);
Run Code Online (Sandbox Code Playgroud)

这就是它在数据库中的样子:

在此输入图像描述

我想在数据库中创建一个新领域(在这个挑战下)latestUpdateTimetamp.它应该是这样的(我手动添加):

在此输入图像描述

我试图将它设置constructorobject这样:

private Map<String,String> latestUpdateTimestamp;

public Challenge(String id, String senderName,  String senderEmail) {   
            this.senderName=senderName;
            this.senderEmail = senderEmail;

            this.latestUpdateTimestamp= ServerValue.TIMESTAMP;
        }
Run Code Online (Sandbox Code Playgroud)

但这就是我得到的database:

在此输入图像描述

我想加入latestUpdateTimestampChallengeChallenge在同一通话对象本身的数据库.可能吗?

在添加之前,我可以以某种方式将此timestamp作为属性添加到此object吗?

我知道我可以拨打新电话并添加此字段,但我想知道是否可以立即进行.

Ale*_*amo 36

是的,你可以,使用Map.首先,根据官方文档,有必要使用如下所示的注释:

@ServerTimestamp Date time;
Run Code Online (Sandbox Code Playgroud)

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

这是您可以latestUpdateTimestamp使用服务器时间戳和同时challangeId使用所需值更新字段的方法.

DocumentReference senderRef = challengeRef
    .document(loggedUserEmail)
    .collection("challenges_feed")
    .document(callengeID);

Map<String, Object> updates = new HashMap<>();
updates.put("latestUpdateTimestamp", FieldValue.serverTimestamp());
updates.put("challangeId", "newChallangeId");
senderRef.update(updates).addOnCompleteListener(new OnCompleteListener<Void>() {/* ... */}
Run Code Online (Sandbox Code Playgroud)

  • @Clyky这些都不是使用`Date`类存储的。 (2认同)