FieldValueを使用してドキュメントフィールドをタイムスタンプ値として設定している公式ドキュメントドキュメントによると、私の質問は次のとおりです。
startDateとendDateおよびdocTimpStampを設定する必要があるように、同じドキュメントに複数のタイムスタンプ値を追加するにはどうすればよいですか?
私は次のコードを使用しています:
@ServerTimestamp Date time;
およびドキュメントの追加について:
Map<String, Object> dataMap = new HashMap<>();
dataMap.put("startDate", FieldValue.serverTimestamp());
time.setTime (...); // here change the date to be the endDate
dataMap.put("endDate", FieldValue.serverTimestamp());
time.setTime (...); // here change the date to be the docTimeStamp
dataMap.put("docTimeStamp",FieldValue.serverTimestamp());
このソリューションは機能しておらず、データが見つからず、同じ値でリアルタイムではありません。
このプロセスをどのように実装できますか?
ServerTimestamp
アノテーションの使用と静的serverTimestamp()
メソッドの使用を混在させていると思います
ServerTimestamp
注釈がされ、「サーバーのタイムスタンプが移入されるタイムスタンプフィールドをマークするために使用される。書き込まれているPOJOがServerTimeStampは、注釈付き@フィールドにnullが含まれている場合は、サーバー生成のタイムスタンプに置き換えられます。」
コードには、time
Dateオブジェクトのnullを含むPOJOはありません。
一方、dataMap.put("endDate", FieldValue.serverTimestamp());
Firestoreに、の値に「サーバーで生成されたタイムスタンプを含める」ように指示しますendDate
。
したがって、3つの値はデータベース(準)に同時に書き込まれるため、同じ時刻が見つかるのが普通です。
さらに、(たとえば)次の2行の間にリンクがないことに注意してください。
time.setTime (...); // here change the date to be the endDate
dataMap.put("endDate", FieldValue.serverTimestamp());
最初の行で新しい値を設定しましtime
たtime
が、2行目では使用されていません。とFieldValue.serverTimestamp()
にリンクされていないtime
上記で説明したように、オブジェクト。
したがって、結論として、書き込みたい値を完全に制御し(time.setTime(...);
同じように)、serverTimestamp()
メソッドの使用を避け、時間オブジェクトを使用する必要があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加