What would be the right way to query a field that is an array of maps.
Currently the structure is
Collection1
Document1
-papers: <---- This is an array
(0):
-Name:abc
-Id:123
(1):
-Name:xyz
-Id:456
And this is my code
DocumentReference docRef = db.collection("Collection1").document("Document1");
docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if (document != null && document.exists()) {
//?? how can I retrieve papers
}
}
});
Basically do I retrieve it and cast it as an ArrayList> and then loop through it to create my final ArrayList ?
Or how does it work ?
As per official documentation regarding arrays:
If you only want to get the entire
papers
array you need to iterate over aMap
like this:But note, even if
papers
object is stored in the database as an array,entry.getValue()
returns anArrayList
, not anarray
.Edit 13 Aug 2018:
According to the updated documentation regarding array membership, now it is possible to filter data based on array values using
whereArrayContains()
method. A simple example would be: