J'ai un objet Challenge
, qui a ses propres propriétés et je peux l'ajouter à la base de données avec succès comme ceci:
DocumentReference challengeRef=usersRef.document(loggedUserEmail).collection("challenges_feed").
document(callengeID);
challengeRef.set(currentChallenge);
Voici à quoi cela ressemble dans la base de données:
Je voudrais créer un nouveau champ dans la base de données (sous ce défi) qui s'appelle latestUpdateTimetamp
. Voici à quoi cela ressemble devrait (je l'ai ajouté manuellement):
J'ai essayé de le placer dans le constructor
du object
comme ceci:
private Map<String,String> latestUpdateTimestamp;
public Challenge(String id, String senderName, String senderEmail) {
this.senderName=senderName;
this.senderEmail = senderEmail;
this.latestUpdateTimestamp= ServerValue.TIMESTAMP;
}
Mais c'est ce que j'obtiens dans le database
:
J'essaie d'ajouter le latestUpdateTimestamp
au Challenge
et le Challenge
lui-même à la base de données au même appel. Est-ce possible?
Puis-je en quelque sorte ajouter ce timestamp
en tant que propriété à ce object
avant de l'ajouter?
Je sais que je peux faire un nouvel appel et ajouter ce champ, mais je me demande si c'est possible à la fois.
Oui, vous pouvez utiliser un Map
. Tout d'abord, selon documents officiels il sera nécessaire d'utiliser une annotation qui ressemble à ceci:
@ServerTimestamp Date time;
Annotation utilisée pour marquer un champ Date à remplir avec un horodatage du serveur. Si un POJO en cours d'écriture contient null pour un champ annoté @ ServerTimestamp, il sera remplacé par un horodatage généré par le serveur.
Voici comment mettre à jour le champ latestUpdateTimestamp
avec l'horodatage du serveur et le challangeId
avec la valeur souhaitée en même temps.
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>() {/* ... */}
Selon la documentation Google, vous pouvez utiliser FieldValue.serverTimestamp (). Quelque chose comme ça
Java
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>() {
.....
}
Kotlin
val docRef = db.collection("objects").document("some-id")
val updates = HashMap<String, Any>()
updates["timestamp"] = FieldValue.serverTimestamp()
docRef.add(updates).addOnCompleteListener { }