मैं यह जांचने के लिए क्लाउड फ़ंक्शन का उपयोग कर रहा हूं कि क्या विशिष्ट दस्तावेज़ मौजूद है लेकिन यह काम नहीं किया। वहां भी कोई दस्तावेज नहीं मिला। कोड नीचे है:

exports.onUserAppCreated = functions.firestore.document('users/{userId}/first_col/{colId}')
  .onCreate((snap, context) => {
    const data = snap.data();

    const colId = data.colId;
    console.log(colId);
    var docRef = db.collection('users/{userId}/somecollection');

    let query = docRef.where('colId', '==', colId).get().then(doc => {
        if (doc.exists) {

            console.log("Document data:", doc.data());
            let tracksRef = db.collection('users/{userId}/othercolllection');
            tracksRef.where('otherId', '==', colId).get()
                                          .then(transSnapshot => {
                                            if (!transSnapshot.exists) {


                                                transSnapshot.ref.set({
                                                otherId: colId,
                                                time:admin.firestore.FieldValue.serverTimestamp()
                                                });
                                            }
                                            return transSnapshot;
                                          }).catch(error => {
                                                   console.log(error);
                                                   //response.status(500).send(error);
                                                })
        } else {
            // doc.data() will be undefined in this case
            console.log("No such document!");
            return;
        }
        return doc;
    }).catch(function(error) {
        console.log("Error getting document:", error);
    });

क्या मैंने यहाँ कुछ गलत किया है?

2
An Nguyen 21 जिंदा 2020, 13:43

1 उत्तर

सबसे बढ़िया उत्तर

मैं समझता हूं कि आप {colId} वाइल्डकार्ड से colId का मान प्राप्त करना चाहते हैं जो 'users/{userId}/first_col/{colId}' पथ में है। आपको context ऑब्जेक्ट का इस्तेमाल इस तरह करना चाहिए :

exports.onUserAppCreated = functions.firestore.document('users/{userId}/first_col/{colId}')
  .onCreate((snap, context) => {
    const data = snap.data();

    const colId = context.params.colId;

    //....

});

ध्यान दें कि snap DocumentSnapshot क्लाउड फ़ंक्शन को ट्रिगर करने वाले दस्तावेज़ के अनुरूप। तो snap.data() आपको इस दस्तावेज़ के फ़ील्ड वाली एक वस्तु देता है, और इसलिए data.colId अपरिभाषित है (जब तक कि आपने दस्तावेज़ आईडी को colId फ़ील्ड में सहेजा नहीं है आपका दस्तावेज़)।

यह भी ध्यान दें कि आप snap ऑब्जेक्ट के माध्यम से snap.id करके colId का मान प्राप्त कर सकते हैं, लेकिन अन्य वाइल्डकार्ड, यानी userId के लिए, आपको उपयोग करने की आवश्यकता होगी context.params.


इसके अलावा, ध्यान दें कि आप व्यवस्थापन SDK (get(), set()) की एसिंक्रोनस विधियों द्वारा लौटाए गए वादों को ध्यान में नहीं रखते हैं। यह बहुत महत्वपूर्ण है कि आप उन वादों को सही ढंग से लौटाएं, संबंधित डॉक्टर.

2
Renaud Tarnec 21 जिंदा 2020, 11:04