source

Flooth의 Firestore에서 단일 문서 쿼리(cloud_firestore Plugin)

factcode 2023. 7. 3. 23:21
반응형

Flooth의 Firestore에서 단일 문서 쿼리(cloud_firestore Plugin)

편집: 이 질문은 오래된 질문이며, 현재 새로운 설명서와 최신 답변을 사용할 수 있습니다.

ID를 통해 단일 문서의 데이터만 검색하고 싶습니다.다음의 예제 데이터를 사용한 접근 방식:

TESTID1 {
     'name': 'example', 
     'data': 'sample data',
}

다음과 같은 것이었습니다.

Firestore.instance.document('TESTID1').get() => then(function(document) {
    print(document('name'));
}

하지만 그것은 정확한 구문이 아닌 것 같습니다.

파이어베이스 설명서가 네이티브 WEB, iOS, Android 등만 다루고 Floot가 아니기 때문에 Floot(dart) 내에서 Firestore 쿼리에 대한 자세한 설명서를 찾을 수 없었습니다.cloud_firestore에 대한 설명서도 너무 짧습니다.여러 문서를 스트림에 쿼리하는 방법을 보여주는 예는 하나뿐이지만 내가 원하는 것은 아닙니다.

설명서 누락 관련 문제: https://github.com/flutter/flutter/issues/14324

단일 문서에서 데이터를 얻는 것은 그리 어려운 일이 아닙니다.

업데이트:

Firestore.instance.collection('COLLECTION').document('ID')
.get().then((DocumentSnapshot) =>
      print(DocumentSnapshot.data['key'].toString());
);

실행되지 않았습니다.

하지만 그것은 정확한 구문이 아닌 것 같습니다.

누락된 구문이므로 올바른 구문이 아닙니다.collection()콜. 콜은 할 수 없습니다.document()직접 당신에게Firestore.instance이 문제를 해결하려면 다음과 같은 방법을 사용해야 합니다.

var document = await Firestore.instance.collection('COLLECTION_NAME').document('TESTID1');
document.get() => then(function(document) {
    print(document("name"));
});

또는 더 간단한 방법으로:

var document = await Firestore.instance.document('COLLECTION_NAME/TESTID1');
document.get() => then(function(document) {
    print(document("name"));
});

실시간으로 데이터를 가져오려면 다음 코드를 사용하십시오.

Widget build(BuildContext context) {
  return new StreamBuilder(
      stream: Firestore.instance.collection('COLLECTION_NAME').document('TESTID1').snapshots(),
      builder: (context, snapshot) {
        if (!snapshot.hasData) {
          return new Text("Loading");
        }
        var userDocument = snapshot.data;
        return new Text(userDocument["name"]);
      }
  );
}

이름을 텍스트 보기로 설정하는 데도 도움이 됩니다.

Null 안전 코드(권장)

기능(예: 버튼을 누를 때) 또는 위젯 내부(예:FutureBuilder).

  • 방법: (일회 듣기)

    var collection = FirebaseFirestore.instance.collection('users');
    var docSnapshot = await collection.doc('doc_id').get();
    if (docSnapshot.exists) {
      Map<String, dynamic>? data = docSnapshot.data();
      var value = data?['some_field']; // <-- The value you want to retrieve. 
      // Call setState if needed.
    }
    
  • 번에 (한 번만 들어보세요.

    FutureBuilder<DocumentSnapshot<Map<String, dynamic>>>(
      future: collection.doc('doc_id').get(),
      builder: (_, snapshot) {
        if (snapshot.hasError) return Text ('Error = ${snapshot.error}');
    
        if (snapshot.hasData) {
          var data = snapshot.data!.data();
          var value = data!['some_field']; // <-- Your value
          return Text('Value = $value');
        }
    
        return Center(child: CircularProgressIndicator());
      },
    )
    
  • A에서 : (항상 듣고 있음)

    StreamBuilder<DocumentSnapshot<Map<String, dynamic>>>(
      stream: collection.doc('doc_id').snapshots(),
      builder: (_, snapshot) {
        if (snapshot.hasError) return Text('Error = ${snapshot.error}');
    
        if (snapshot.hasData) {
          var output = snapshot.data!.data();
          var value = output!['some_field']; // <-- Your value
          return Text('Value = $value');
        }
    
        return Center(child: CircularProgressIndicator());
      },
    )
    

where 절을 사용하려면

await Firestore.instance.collection('collection_name').where(
    FieldPath.documentId,
    isEqualTo: "some_id"
).getDocuments().then((event) {
    if (event.documents.isNotEmpty) {
        Map<String, dynamic> documentData = event.documents.single.data; //if it is a single document
    }
}).catchError((e) => print("error fetching data: $e"));

이것은 간단합니다. 문서 스냅샷을 사용할 수 있습니다.

DocumentSnapshot variable = await Firestore.instance.collection('COLLECTION NAME').document('DOCUMENT ID').get();

다음을 사용하여 데이터에 액세스할 수 있습니다.variable.data['FEILD_NAME']

Firebase Firestore 12/2021 업데이트

StreamBuilder(
          stream: FirebaseFirestore.instance
              .collection('YOUR COLLECTION NAME')
              .doc(id) //ID OF DOCUMENT
              .snapshots(),
        builder: (context, snapshot) {
        if (!snapshot.hasData) {
          return new CircularProgressIndicator();
        }
        var document = snapshot.data;
        return new Text(document["name"]);
     }
  );
}

이것이 2021년에 저에게 효과가 있었던 것입니다.

      var userPhotos;
      Future<void> getPhoto(id) async {
        //query the user photo
        await FirebaseFirestore.instance.collection("users").doc(id).snapshots().listen((event) {
          setState(() {
            userPhotos = event.get("photoUrl");
            print(userPhotos);
          });
        });
      }

파이어스토어 컬렉션에서 문서를 가져오거나 문서에 대한 일부 작업을 수행하고 일부 위젯을 사용하여 문서를 표시하지 않으려면 이 코드를 사용합니다(업데이트된 2022년 1월).

   fetchDoc() async {

   // enter here the path , from where you want to fetch the doc
   DocumentSnapshot pathData = await FirebaseFirestore.instance
       .collection('ProfileData')
       .doc(currentUser.uid)
       .get();

   if (pathData.exists) {
     Map<String, dynamic>? fetchDoc = pathData.data() as Map<String, dynamic>?;
     
     //Now use fetchDoc?['KEY_names'], to access the data from firestore, to perform operations , for eg
     controllerName.text = fetchDoc?['userName']


     // setState(() {});  // use only if needed
   }
}

간단한 방법:

StreamBuilder(
          stream: FirebaseFirestore.instance
              .collection('YOUR COLLECTION NAME')
              .doc(id) //ID OF DOCUMENT
              .snapshots(),
        builder: (context, snapshot) {
        if (!snapshot.hasData) {
          return new CircularProgressIndicator();
        }
        var document = snapshot.data;
        return new Text(document["name"]);
     }
  );
}
        var  document = await FirebaseFirestore.instance.collection('Users').doc('CXvGTxT49NUoKi9gRt96ltvljz42').get();
        Map<String,dynamic>? value = document.data();
        print(value!['userId']);

Firestore 문서는 다음 코드로 가져올 수 있습니다.

future FirebaseDocument() async{

    var variable = await FirebaseFirestore.instance.collection('Collection_name').doc('Document_Id').get();
    print(variable['field_name']); 
}

다음 단순 코드를 사용합니다.

Firestore.instance.collection("users").document().setData({
   "name":"Majeed Ahmed"
});

언급URL : https://stackoverflow.com/questions/53517382/query-a-single-document-from-firestore-in-flutter-cloud-firestore-plugin

반응형