Angular,Angularfire2,获取数据库中数字的平均值

时间:2018-05-06 00:03:11

标签: angular firebase google-cloud-firestore angularfire2

我一直在努力想出这个问题。我觉得它比我想象的要简单得多。我正在使用angular和angularfire2我有一个评级系统设置,基本上我想要做的是查询集合并获取每个文档中的数字字段,将它们加在一起并获得平均值。但我知道如何查询数据库,并在模板中显示我的所有评论以及如何获取集合中的文档总数,以便我有除以的数字。我无法在我的typscript文件中弄清楚如何获取所有这些值并将它们加在一起然后得到并平均。

this.reviews = db.collection('dispensaries').doc(this.id).collection('reviews').snapshotChanges().map(actions => {
  return actions.map(a => {
    const data = a.payload.doc.data();
    data.id = a.payload.doc.id;
    console.log(data.stars);
    return data;
  });
});


db.collection('dispensaries').doc(this.id).collection('reviews')
  .ref
  .get().then(function(querySnapshot) {
    console.log(querySnapshot.size);
  });

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题,但是我能够获取数据并将数字放入变量中,问题是我无法在内部在Firestore中执行更新,但是我附加了可能对您有用的代码,此方法需要2个参数:id和必须添加到现有参数中的数字(数量),现有参数可以通过get方法获取。

代码:

this.afs.doc(`productos/${id}`).ref.get().then(function(doc) {
  if (doc.exists) {
    const reemplazarCantidad = doc.get('cantidadActual') + cant;
    console.log('Datos:', doc.data());
    console.log('Hay:', doc.get('cantidadActual'));
    console.log('Se debe sumar: ', cant);
    console.log('total: ', reemplazarCantidad);
  } else {
      console.log('No hay datos');
  }
}).catch(function(error) {
    console.log('Error:', error);
});

} 按照构造函数的逻辑,我将afs声明为angularfirestore

constructor(public afs: AngularFirestore) { 

我现在发现的解决方案是:

在服务中。

 agregaCantidad(id, cant){
this.afs.doc(`productos/${id}`).ref.get().then(function(doc) {
  if (doc.exists) {
    const reemplazarCantidad = doc.get('cantidadActual') + cant;
    doc.ref.update({cantidadActual: reemplazarCantidad});
  } else {
      console.log('No hay datos');
  }
}).catch(function(error) {
    console.log('Error:', error);
});

}

并调用方法:

this.xxservicexx.agregaCantidad(idProducto,cantidad)

注意:此解决方案的一部分涉及将产品本身的名称记录为产品ID。在我看来,这是最实用的。

但是我不确定这是正确的还是最好的,

谢谢,最好的问候。 ML