android - Android Studio:使用子字符串查询包含数组节点的文档
问题描述
我正在尝试在集合中搜索包含某个key
.
以下是我构建 Firestore 数据库的方式:
-- FirestoreRoot
|-- Products (Collection)
|-- Departments (Document)
|-- Food (Colletion)
|-- {Id} (Document)
-- description : "this is my very first description"
-- keywords :
-- 0 : this
-- 1 : is
-- 2 : my
-- 3 : very
-- 4 : first
-- 5 : description
在下面的示例中,我可以使用 asubstring
作为description
. 迄今为止,此方法不适用于查询以下单词。在下面的示例中,键入字母“thi”就足以返回文档。
CollectionReference colecRef = FirebaseFirestore.getInstance()
.collection("Products")
.document("Departments")
.collection("Food");
Query query = colecRef;
query.whereGreaterThanOrEqualTo("description", searchField.getText().toString().toLowerCase())
.whereLessThan("description", searchField.getText().toString().toLowerCase()+'\uf8ff')
.get().addOnSuccessListener(SearchActivity.this, new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
for (QueryDocumentSnapshot documentSnapshot : queryDocumentSnapshots) {
Log.i(TAG, "onSuccess: "+documentSnapshot);
}
}
});
就我而言,我需要使用 1 个或多个键进行搜索,例如:first或first description。并使用整个单词或仅使用子字符串,例如:first或descr
我试过用whereArrayContains()
,但我不能用它打字multiple keys
或substring
。
query.whereArrayContains("keywords",searchField.getText().toString().toLowerCase())
.get().addOnSuccessListener(SearchActivity.this, new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
for (QueryDocumentSnapshot documentSnapshot : queryDocumentSnapshots) {
Log.i(TAG, "onSuccess: "+documentSnapshot);
}
}
})
我很感激任何帮助。
解决方案
Firestore 目前只提供两种查询数组内容的方法:
- 具有whereArrayContains()的数组成员资格。这将告诉您数组中是否存在元素。它必须完全匹配 - 没有子字符串。
- 具有whereArrayContainsAny()的数组包含任何成员资格。这将告诉您数组中是否存在任何给定的字符串。它必须完全匹配 - 没有子字符串。
如您所见,在数组中搜索子字符串根本不起作用。您可能需要考虑将另一个数据库与 Firestore 结合使用,以满足这些特定查询,因为 Firestore 不太适合它们。
推荐阅读
- python - Python (Pandas) - 将堆积的机器数据移动到列中
- php - PHP:整理日期时间信息的方法?
- laravel - 检测肉眼可见图像中的独特颜色
- android - 按字符串类型检索按钮 ID 的名称
- javascript - 如何在反应和电子之间进行通信
- json - 您可以使用 Python 和 load_table_from_json() 将 JSON 格式的数据加载到 BigQuery 表吗?
- unity3d - Unity 2D 胸部玩家检测
- javascript - PHP不向JS发送变量
- javascript - 无法读取未定义的导入猫鼬脚本的属性“doc”
- javascript - 如何使用 pdfkit(节点 js)将多个图像转换为 pdf?