Облачные функции Firebase - PullRequest
0 голосов
/ 25 февраля 2020

Я использую облачную функцию Firebase для создания нового документа из другого документа .

По сути, у меня есть поле в документе , называемое reps { } который принимает userId в качестве Key и int в качестве значения .

. Я хочу проверить, является ли sum значений в повторениях {} больше, чем 100 (пример).

У меня есть функция onUpdate, которая отлично работает, но мне нужно добавить эту функцию. я попробовал это:

var count = 0;
admin.firestore()
  .collection("posts")
  .doc(userId)
  .collection("userPosts")
  .doc(postId).get().then(doc =>
  { 
    doc['reps'].values.forEach(val =>
    { 
      count += val;
     });
  });

  console.log(count);

С помощью этого запроса я получаю карту повторений, Как я могу вычислить сумму всего значения внутри карты :

admin
  .firestore()
  .collection("posts")
  .doc(userId)
  .collection("userPosts")
  .doc(postId).get().then(function (doc)
  {
    if (doc.exists)
    {
      console.log(doc.get("reps"));
    }
  });

Ответы [ 2 ]

2 голосов
/ 25 февраля 2020

Делая

admin.firestore()
  .collection("posts")
  .doc(userId)
  .collection("userPosts")
  .doc(postId).get()

, вы запрашиваете один документ, а метод get() возвращает Promise, который разрешается с DocumentSnapshot.

Следовательно, выполнение

doc['reps'].values

не будет работать.

Вам необходимо использовать метод DocumentSnapshot get(), как показано ниже:

admin.firestore()
  .collection("posts")
  .doc(userId)
  .collection("userPosts")
  .doc(postId).get().then(doc =>
  { 
    var respObj = doc.get('reps');
    Object.entries(respObj).forEach(([key, value]) => { 
      count += value;
     });
  });
0 голосов
/ 25 февраля 2020

Так что я только что понял:

Я использовал get () , чтобы получить поле, которое я искал.

Для вычисления сумма значений я использовал:

Object.keys(rep).forEach(function (values) { var value = rep[values]; repCount += value; });

Вот мой код:

await admin
  .firestore()
  .collection("posts")
  .doc(userId)
  .collection("userPosts")
  .doc(postId).get().then(function (doc)
  {
    if (doc.exists)
    {
      var rep = doc.get("reps");
      Object.keys(rep).forEach(function (values)
      {
        var value = rep[values];
        repCount += value;
      });
    }
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...