比较Firestore数组与另一个Firestore数组的whereArrayContains &g



我想比较一个数组值与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);,查询所需文档。

最新更新