I have a Challenge
object, which has it\'s own properties and I\'m able to add it to the database successfully like this:
DocumentReference chal
Yes you can, using a Map
. First of all, according to official docs it will be necessary to use an annotation that looks like this:
@ServerTimestamp Date time;
Annotation used to mark a Date field to be populated with a server timestamp. If a POJO being written contains null for a @ServerTimestamp-annotated field, it will be replaced with a server-generated timestamp.
This is how you can update the latestUpdateTimestamp
field with the server timestamp and the challangeId
with the desired value at the same time.
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>() {/* ... */}
As per Google Documentation You can use FieldValue.serverTimestamp(). Something like this
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 { }
In kotlin we need to define an initialized data class to send the whole object to Firestore, make sure that you add your @ServerTimeStamp
in the last field, since if you add it at first, the construction of your object will need to pass this time as a value to your Object instance.
data class Order(val orderId:String, val cart:MutableList<Cart>, @ServerTimeStamp timestamp:Date? = null)
Create your object and send the object values to Firestore
val order = Order("kJKLkj259ajHHkl",cartList)
FirebaseFirestore.getInstance().collection("orders").add(order)...
This will create your object with orderId, cartlist and also the timestamp which will be stored as
In my case I'm from Argentina, and the date picked up from my app was this one
timestamp: 30 de marzo de 2020, 10:12:43 UTC-3
You can find more about date formats here and here
So you could use Firebase tools to do so.
Basically if you use @ServerTimestamp in your object and pass nil as a value then the server will automatically add a server timestamp.
Not sure how to do it in Java as I am a Swift developer, but just to give you an example this is what I added in my object model:
//This is a Swift code for demonstration
@ServerTimestamp var timeStamp: Timestamp?
So here it just says there is a variable named timeStamp of an optional Timestamp data type and there is no value assigned so it is nil.
And then I upload the object as I would do normally without passing any value with timeStamp.
This means it is uploaded as nil and Firestore automatically assigns it a server timestamp.