javascript Firebase云函数

qlvxas9a  于 2023-05-27  发布在  Java
关注(0)|答案(2)|浏览(190)

我正在使用Firebase云函数从另一个文档创建新文档
基本上,我在一个名为reps {}的文档中有一个字段,它将userId作为Key,将int作为value**。
我想检查reps {}值的总和是否大于100(示例)。
我有一个onUpdate功能,工作完美,但我需要添加此功能。我试过这个:

  1. var count = 0;
  2. admin.firestore()
  3. .collection("posts")
  4. .doc(userId)
  5. .collection("userPosts")
  6. .doc(postId).get().then(doc =>
  7. {
  8. doc['reps'].values.forEach(val =>
  9. {
  10. count += val;
  11. });
  12. });
  13. console.log(count);

通过这个查询,我得到了reps map,我如何计算map中所有值****的总和

  1. admin
  2. .firestore()
  3. .collection("posts")
  4. .doc(userId)
  5. .collection("userPosts")
  6. .doc(postId).get().then(function (doc)
  7. {
  8. if (doc.exists)
  9. {
  10. console.log(doc.get("reps"));
  11. }
  12. });
nlejzf6q

nlejzf6q1#

通过做

  1. admin.firestore()
  2. .collection("posts")
  3. .doc(userId)
  4. .collection("userPosts")
  5. .doc(postId).get()

你正在查询一个文档,get()方法返回一个Promise,它使用DocumentSnapshot进行解析。
因此,做

  1. doc['reps'].values

不起作用
您需要使用DocumentSnapshot的get()方法,如下所示:

  1. admin.firestore()
  2. .collection("posts")
  3. .doc(userId)
  4. .collection("userPosts")
  5. .doc(postId).get().then(doc =>
  6. {
  7. var respObj = doc.get('reps');
  8. Object.entries(respObj).forEach(([key, value]) => {
  9. count += value;
  10. });
  11. });
展开查看全部
wr98u20j

wr98u20j2#

所以我就想明白了:
我使用了get()来获取我正在寻找的字段。
要计算
值的总和
我使用:
Object.keys(rep).forEach(function (values) { var value = rep[values]; repCount += value; });
下面是我的代码:

  1. await admin
  2. .firestore()
  3. .collection("posts")
  4. .doc(userId)
  5. .collection("userPosts")
  6. .doc(postId).get().then(function (doc)
  7. {
  8. if (doc.exists)
  9. {
  10. var rep = doc.get("reps");
  11. Object.keys(rep).forEach(function (values)
  12. {
  13. var value = rep[values];
  14. repCount += value;
  15. });
  16. }
  17. });
展开查看全部

相关问题