본문 바로가기
C#/Firebase

C# : Firebase 사용하기 - 04 (Firebase 데이터 검색)

by Half-Dev 2021. 1. 2.

안녕하세요.

하프개발자 입니다. 

이번에는 Firebase 데이터 검색을 보도록 하겠습니다.

 


Part 1. Class 파일 생성

추가 -> 새 항목을 클릭하여 클래스 파일을 추가해 주도록 합시다.

이름은 FirebaseProperty로 하겠습니다.

 

FirebaseProperty의 코드는 아래와 같이 진행해주도록 할게요.

아래의 코드에서 

15줄19줄은 이 다음으로 생성할 Firebase의 필드이름과 똑같이 해주시면 됩니다.

클래스 파일의 필드이름과, Firebase의 필드이름이 다르다면 값을 받아오지 못 합니다.

그러니 꼭 같게 해주시길 바랍니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Google.Cloud.Firestore;
 
namespace CsFirebaseBlog
{
    [FirestoreData]
    public class FirebaseProperty
    {
        [FirestoreProperty]
        //필드 이름
        public string Name { get; set; }
 
        [FirestoreProperty]
        //필드 이름
        public string PhoneNo { get; set; }
    }
}
 
cs

 

 

테스트를 위해서 Firebase의 MyTest라는 컬렉션과 각각의 문서, 필드를 수동으로 만들어 줍니다.

 

다음으로 3개의 버튼RichTextBox도 생성해 줍시다.

 

 

 

Part 2. 데이터 검색

다음과 같이 메소드를 추가해주도록 하겠습니다.

MyTest라는 컬렉션의 TestA라는 문서를 받아오고 해당 필드의 대한 값을 뿌려주는 역할을 하는 코드 입니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
async void GetAllData_Of_A_Document()
{
    DocumentReference docref = db.Collection("MyTest").Document("TestA");
    DocumentSnapshot snap = await docref.GetSnapshotAsync();
 
    if (snap.Exists)
    {
        Dictionary<stringobject> city = snap.ToDictionary();
        foreach (var item in city)
        {
            richTextBox1.Text += string.Format("{0}: {1}\n", item.Key, item.Value);
 
        }
    }
}
cs

 


다음으로는 모든 문서의 필드를 출력하는 코드 입니다.

TestB 와 TestC는 제가 필드값을 넣지 않았기 때문에 해당 필드값은 출력되지 않는것을 볼 수 있습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
async void Get_ALL_Documents_From_A_Collection()
{
    Query qref = db.Collection("MyTest");
    QuerySnapshot snap = await qref.GetSnapshotAsync();
 
    foreach (DocumentSnapshot docsnap in snap)
    {
        FirebaseProperty fp = docsnap.ConvertTo<FirebaseProperty>();
 
        if (docsnap.Exists)
        {
            richTextBox1.Text += "[Doc Name : " + docsnap.Id + "]\n";
            richTextBox1.Text += fp.Name + "\n";
            richTextBox1.Text += fp.PhoneNo + "\n\n";
 
        }
    }
}
cs

 


다음으로는 제일 중요한 조건 검색 입니다.

사용하면 많이 유용할 것 같군요.

 

3줄에 있는 WhereEqualTo 이 코드가 조건을 사용하는 부분 입니다.

WhaereEqualTo(비교하고자 하는 필드, 비교 값) 으로 사용하시면 되겠습니다.

 

아래의 결과를 보면, 해당 조건에 대한 값만 출력이 되는것을 볼 수 있습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
async void Get_Multiple_Documents_From_A_Collection()
{
    Query qref = db.Collection("MyTest").WhereEqualTo("Name""Kim jinwon");
    QuerySnapshot snap = await qref.GetSnapshotAsync();
 
    foreach (DocumentSnapshot docsnap in snap)
    {
        FirebaseProperty fp = docsnap.ConvertTo<FirebaseProperty>();
 
        if (docsnap.Exists)
        {
            richTextBox1.Text += "[Doc Name: " + docsnap.Id + "]\n";
            richTextBox1.Text += fp.Name + "\n";
            richTextBox1.Text += fp.PhoneNo + "\n\n";
 
        }
    }
}
cs

 


제가 준비한 내용은 여기까지 입니다.

다음글에서 뵙도록 하겠습니다.

감사합니다.

 

해당 코드는 저의 깃허브에서도 볼 수 있습니다.

전체 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Google.Cloud.Firestore;
 
namespace CsFirebaseBlog
{
    public partial class Form1 : Form
    {
        FirestoreDb db;
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            GetAllData_Of_A_Document();
        }
        private void button2_Click(object sender, EventArgs e)
        {
            Get_ALL_Documents_From_A_Collection();
        }
 
        private void button3_Click(object sender, EventArgs e)
        {
            Get_Multiple_Documents_From_A_Collection();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {  
            string path = AppDomain.CurrentDomain.BaseDirectory + @"cs-firebase-blog-firebase-adminsdk-18cwe-b5971a4787.json";
            Environment.SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS", path);
 
            db = FirestoreDb.Create("cs-firebase-blog");
        }
 
        async void GetAllData_Of_A_Document()
        {
            DocumentReference docref = db.Collection("MyTest").Document("TestA");
            DocumentSnapshot snap = await docref.GetSnapshotAsync();
 
            if (snap.Exists)
            {
                Dictionary<stringobject> city = snap.ToDictionary();
                foreach (var item in city)
                {
                    richTextBox1.Text += string.Format("{0}: {1}\n", item.Key, item.Value);
 
                }
            }
        }
 
        async void Get_ALL_Documents_From_A_Collection()
        {
            Query qref = db.Collection("MyTest");
            QuerySnapshot snap = await qref.GetSnapshotAsync();
 
            foreach (DocumentSnapshot docsnap in snap)
            {
                FirebaseProperty fp = docsnap.ConvertTo<FirebaseProperty>();
 
                if (docsnap.Exists)
                {
                    richTextBox1.Text += "[Doc Name : " + docsnap.Id + "]\n";
                    richTextBox1.Text += fp.Name + "\n";
                    richTextBox1.Text += fp.PhoneNo + "\n\n";
 
                }
            }
        }
 
        //조건 검색
        async void Get_Multiple_Documents_From_A_Collection()
        {
            Query qref = db.Collection("MyTest").WhereEqualTo("Name""Kim jinwon");
            QuerySnapshot snap = await qref.GetSnapshotAsync();
 
            foreach (DocumentSnapshot docsnap in snap)
            {
                FirebaseProperty fp = docsnap.ConvertTo<FirebaseProperty>();
 
                if (docsnap.Exists)
                {
                    richTextBox1.Text += "[Doc Name: " + docsnap.Id + "]\n";
                    richTextBox1.Text += fp.Name + "\n";
                    richTextBox1.Text += fp.PhoneNo + "\n\n";
 
                }
            }
        }
    }
}
cs

 

댓글