Challenge
オブジェクトがあり、これには独自のプロパティがあり、次のようにデータベースに正常に追加できます。
DocumentReference challengeRef=usersRef.document(loggedUserEmail).collection("challenges_feed").
document(callengeID);
challengeRef.set(currentChallenge);
データベースでは次のようになります。
latestUpdateTimetamp
と呼ばれるデータベースに(このチャレンジの下で)新しいフィールドを作成したいと思います。これは、shouldのように見えるはずです(手動で追加しました):
私は次のようにconstructor
のobject
に設定しようとしました:
private Map<String,String> latestUpdateTimestamp;
public Challenge(String id, String senderName, String senderEmail) {
this.senderName=senderName;
this.senderEmail = senderEmail;
this.latestUpdateTimestamp= ServerValue.TIMESTAMP;
}
しかし、これはdatabase
で得られるものです:
latestUpdateTimestamp
をChallenge
に追加しようとしていますが、Challenge
オブジェクト自体を同じ呼び出しでデータベースに追加しようとしています。可能ですか?
追加する前に、このtimestamp
をプロパティとしてこのobject
に何らかの方法で追加できますか?
新しい電話をかけてこのフィールドを追加できることは知っていますが、すぐにそれが可能かどうか疑問に思っています。
はい、できます。Map
を使用します。まず、 official docs によれば、次のような注釈を使用する必要があります。
@ServerTimestamp Date time;
日付フィールドにサーバーのタイムスタンプが入力されるようにマークするために使用される注釈。書き込まれるPOJOの@ServerTimestamp注釈付きフィールドに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>() {/* ... */}
GoogleドキュメントごとにFieldValue.serverTimestamp()を使用できます。このようなもの
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>() {
.....
}
コトリン
val docRef = db.collection("objects").document("some-id")
val updates = HashMap<String, Any>()
updates["timestamp"] = FieldValue.serverTimestamp()
docRef.add(updates).addOnCompleteListener { }