store 存取数据数组对象_如何从Firestore获取对象数组

What would be the right way to query a field that is an array of maps.

Currently the structure is

Collection1

Document1

-papers:

(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() {

@Override

public void onComplete(@NonNull Task 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 ?

解决方案Although Cloud Firestore can store arrays, it does not support querying array members or updating single array elements.

If you only want to get the entire papers array you need to iterate over a Map like this:

Map map = document.getData();

for (Map.Entry entry : map.entrySet()) {

if (entry.getKey().equals("papers")) {

Log.d("TAG", entry.getValue().toString());

}

}

But note, even if papers object is stored in the database as an array, entry.getValue() returns an ArrayList, not an array.

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:

CollectionReference citiesRef = db.collection("cities");

citiesRef.whereArrayContains("regions", "west_coast");

This query returns every city document where the regions field is an array that contains west_coast. If the array has multiple instances of the value you query on, the document is included in the results only once.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值