如何在Meteor中的Array中的嵌套对象中访问Object

时间:2016-03-12 15:46:36

标签: mongodb meteor meteor-blaze

我使用以下出版物来汇总我的产品的有效试用版:

    Connection conn;
    Boolean mysqlStatus = false;

    while(mysqlStatus.equals(false)) {

        try {
            Class.forName(driver).newInstance();
            conTest = DriverManager.getConnection(host + dbName, username, password);
            mysqlStatus = true;
        } catch (SQLException e) {
            // server offline

            Alert alert = new Alert(AlertType.CONFIRMATION);
            alert.setTitle("Database offline");
            alert.setHeaderText("De MySQL database server is offline");
            alert.setContentText("Start de server en probeer opnieuw.");

            ButtonType buttonTypeOne = new ButtonType("Opnieuw controleren");
            ButtonType buttonTypeCancel = new ButtonType("Exit", ButtonData.CANCEL_CLOSE);

            alert.getButtonTypes().setAll(buttonTypeOne, buttonTypeCancel);

            Optional<ButtonType> result = alert.showAndWait();
            if (result.get() == buttonTypeOne){
                mysqlStatus = false;
                alert.close();
            } else {
                System.exit(0);
            }
        } catch (Exception e) {
            mysqlStatus = false;
            ExceptionDialog cexD = new ExceptionDialog();
            cexD.setStrError("Er is een onverwachte fout opgetreden.");
            cexD.setException(e);
        } finally {
            try {
                conTest.close();
            } catch (SQLException e) {
                mysqlStatus = false;
                ExceptionDialog cexD = new ExceptionDialog();
                cexD.setStrError("Er is een onverwachte fout opgetreden.");
                cexD.setException(e);
            }
        }

    }

结果抛出以下对象

    Meteor.publish('pruebasActivas', function() {
  var pruebasActivas = Clientes.aggregate([
    {
      $match: {
        'saldoPrueba': {
          '$gt': 0
        }
      }
    }, {
      $group: {
        _id: {
          id: '$_id',
          cliente: '$cliente'
        },
        totalPruebas: {
          $sum: '$saldoPrueba'
        }
      }
    }
  ]);
});

if (pruebasActivas && pruebasActivas.length > 0 && pruebasActivas[0]) {
  return this.added('aggregate3', 'dashboard.pruebasActivas', pruebasActivas);
}

使用Blaze如何使用Objects迭代此数组以显示“cliente”和“totalPruebas”?

1 个答案:

答案 0 :(得分:1)

让自己成为帮助者,只使用未命名为_id的顶级键将对象转换为对象数组:

Template.myTemplate.helpers({
  pruebasActivas: function(){
    var ob = myCollection.findOne(); // assuming your collection returns a single object
    var clientes = [];

    for (var p in ob){
      if (ob.hasOwnProperty(p) && p !== "_id"){

        // here we flatten the object down to two keys
        clientes.push({cliente: ob[p]._id.cliente, totalPruebas: ob[p].totalPruebas});
      }
    }
    return clientes;
  }
});

现在大火你可以做:

<template name="myTemplate">
  {{#each pruebasActivas}}
    Cliente: {{cliente}}
    Total Pruebas: {{totalPruebas}}
  {{/each}}
</template>

请参阅iterate through object properties