web-dev-qa-db-ja.com

Firestore-追加されるオブジェクトにサーバータイムスタンプフィールドを追加する

Challengeオブジェクトがあり、これには独自のプロパティがあり、次のようにデータベースに正常に追加できます。

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

データベースでは次のようになります。

enter image description here

latestUpdateTimetampと呼ばれるデータベースに(このチャレンジの下で)新しいフィールドを作成したいと思います。これは、shouldのように見えるはずです(手動で追加しました):

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

latestUpdateTimestampChallengeに追加しようとしていますが、Challengeオブジェクト自体を同じ呼び出しでデータベースに追加しようとしています。可能ですか?

追加する前に、このtimestampをプロパティとしてこのobjectに何らかの方法で追加できますか?

新しい電話をかけてこのフィールドを追加できることは知っていますが、すぐにそれが可能かどうか疑問に思っています。

10
Tal Barda

はい、できます。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>() {/* ... */}
34
Alex Mamo

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 { }
1
Masum