Облачная функция: документ не найден - PullRequest
2 голосов
/ 21 января 2020

Я использую облачную функцию, чтобы проверить, существует ли указанный c документ, но он не работает. Документ не найден, даже там не было. Код ниже:

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);
    });

Я что-то здесь не так сделал?

1 Ответ

2 голосов
/ 21 января 2020

Я понимаю, что вы хотите получить значение 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 в вашем документе).

Обратите внимание, что вы можете получить значение colId через объект snap, выполнив snap.id, но для другого подстановочного знака, то есть userId, вам нужно будет использовать context.params.


Кроме того, обратите внимание, что вы не учитываете обещания, возвращаемые асинхронными методами Admin SDK (get(), set()). Очень важно , чтобы вы правильно вернули эти обещания, см. Соответствующий do c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...