我想比较一个数组值与firestore中的另一个数组值下面的代码是"成分"。是firestore中的数组,并且"sugar"是成分的对比但我想做的是"成分"比较我的字符串[]数组值1乘1例如,如果:String[] a = {"sugar","b","c"},那么这应该是真的String[] b = {"salt","pepper"},那么这将为假。为了更清晰的需要,我在代码中注释了。
put Arrays.asList(test)不起作用。有解决方案吗?
List<String> ingreList;
String[] ingredientLists;
String[] test = {"sugar","b"};
private void checkTesting() {
postRef.whereArrayContains("ingredients", "sugar" /*PUTTING STRING[] HERE TO COMPARE OR ARRAYLIST STRING IS ALSO FINE TOO (I HAVE BOTH) */)
.get()
.addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
postLists3.clear();
for(QueryDocumentSnapshot documentSnapshot: queryDocumentSnapshots){
Post post = documentSnapshot.toObject(Post.class);
postLists3.add(post);
}
postAdapter.notifyDataSetChanged();
progressBar.setVisibility(View.GONE);
}
});
}
如果您想传递任何数组而不是字符串,则必须使用whereArrayContainsAny
如下所示:
postRef.whereArrayContainsAny("ingredients", Arrays.asList("sugar"))
但是请注意,这将获取ingredients
字段中至少包含whereArrayContainsAny
传递的列表中的1项的文档。例如,如果文档中的成分字段具有["sugar", "milk", "water"]
,并且您使用Arrays.asList("sugar")
进行查询,则该文档将在查询结果中返回。
如果你想获取包含所有成分的文档,那么你可能需要将成分存储为一个映射:
ingredients: {
sugar: true,
water: true
}
可以添加多个.whereEqualTo("ingredients.[NAME]", true);
,查询所需文档。