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

我有一个对象,它有自己的属性,我能够成功地将其添加到数据库中,如下所示:Challenge

DocumentReference challengeRef=usersRef.document(loggedUserEmail).collection("challenges_feed").
                document(callengeID);
challengeRef.set(currentChallenge);

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

enter image description here

我想在数据库中创建一个新字段(在此挑战下),称为.这是它应该是什么样子的(我已经手动添加了它):latestUpdateTimetamp

enter image description here

我试图像这样设置它:constructorobject

private Map<String,String> latestUpdateTimestamp;

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

            this.latestUpdateTimestamp= ServerValue.TIMESTAMP;
        }

但这就是我在中得到的:database

enter image description here

我正在尝试在同一调用中将 latestUpdateTimestamp 添加到挑战中,并将 Challenge 对象本身添加到数据库中。可能吗?

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

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


答案 1

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

@ServerTimestamp Date time;

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

这样,您就可以同时使用服务器时间戳和所需值更新字段。latestUpdateTimestampchallangeId

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>() {/* ... */}

答案 2

根据Google Documentation,您可以使用FieldValue.serverTimestamp()。类似的东西

爪哇岛

DocumentReference docRef = db.collection("objects").document("some-id");
Map<String,Object> post = new HashMap<>();
post.put("timestamp", FieldValue.serverTimestamp());

docRef.add(updates).addOnCompleteListener(new OnCompleteListener<Void>() {
 .....
}

科特林

val docRef = db.collection("objects").document("some-id")
val updates = HashMap<String, Any>()
updates["timestamp"] = FieldValue.serverTimestamp()

docRef.add(updates).addOnCompleteListener { }

推荐