如何在firestore文档的字段中搜索

时间:2017-10-22 17:09:08

标签: android google-cloud-firestore

如何搜索firestore文档?如果firestore集合包含某些文档,并且在文档中有一个名为“title”的字符串字段。如何使用firebase android api搜索特定标题。

2 个答案:

答案 0 :(得分:2)

该文档在文档here中,在页面的最后一部分中标记为从集合中获取多个文档

Firestore提供whereEqualTo功能来查询您的数据。

示例代码(来自文档):

db.collection("cities")
        .whereEqualTo("capital", true) // <-- This line
        .get()
        .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                if (task.isSuccessful()) {
                    for (DocumentSnapshot document : task.getResult()) {
                        Log.d(TAG, document.getId() + " => " + document.getData());
                    }
                } else {
                    Log.d(TAG, "Error getting documents: ", task.getException());
                }
            }
        });

答案 1 :(得分:0)

我已经使用 MutableLiveData 搜索特定用户的名称。我在其中传递用户的名称,并检查该名称是否在 Firestore 中可用

这是我的代码:-

    public MutableLiveData<UsersModel> getSpecificUser(final String name) {
    final MutableLiveData<UsersModel> usersData = new MutableLiveData<>();
    db.collection("users")
            .whereEqualTo("name", name)
            .addSnapshotListener(new EventListener<QuerySnapshot>() {
                @Override
                public void onEvent(@Nullable QuerySnapshot snapshot, @Nullable FirebaseFirestoreException e) {

                    if(e!=null || snapshot.size()==0){
                        Toast.makeText(activity, "User not found", Toast.LENGTH_SHORT).show();
                    }

                    for (DocumentChange userDoc : snapshot.getDocumentChanges()) {
                        UsersModel user = userDoc.getDocument().toObject(UsersModel.class);

                        if (user.name != null) {
                            if (userDoc.getType() == DocumentChange.Type.ADDED || userDoc.getType() == DocumentChange.Type.MODIFIED) {
                                usersData.setValue(user);
                            }
                        }
                    }
                }
            });

    return usersData;
}