Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 聚合在具有匹配和组的Mongoose中不起作用_Angularjs_Node.js_Mongodb_Mongoose - Fatal编程技术网

Angularjs 聚合在具有匹配和组的Mongoose中不起作用

Angularjs 聚合在具有匹配和组的Mongoose中不起作用,angularjs,node.js,mongodb,mongoose,Angularjs,Node.js,Mongodb,Mongoose,我正在使用AngularJS、NodeJS和Mongoose编写一个应用程序。 现在,我正在做一个图表,我需要通过一些参数返回一些数据。 但这种聚合不起作用。我在MongoDB中使用此查询: 当我尝试使用Mongoose在我的应用程序中运行相同的查询时,查询不起作用。我看到的问题是,MATCH和GROUP之间的逗号正在消失。当我尝试仅使用组或匹配项进行搜索时,查询会起作用。有人能帮我吗?这是应用程序代码: .then(function (listaUsuarios){ var

我正在使用AngularJS、NodeJS和Mongoose编写一个应用程序。 现在,我正在做一个图表,我需要通过一些参数返回一些数据。 但这种聚合不起作用。我在MongoDB中使用此查询:

当我尝试使用Mongoose在我的应用程序中运行相同的查询时,查询不起作用。我看到的问题是,MATCH和GROUP之间的逗号正在消失。当我尝试仅使用组或匹配项进行搜索时,查询会起作用。有人能帮我吗?这是应用程序代码:

.then(function (listaUsuarios){
       var argsVisit;


      if (tipoVisita == 'N'){
            argsVisit = {'user' : { "$in" :listaUsuarios }, 'tipo' : { "$in" : ["2001","2002"] }, "createdAt": {"$gte": dataInicial, "$lt": dataFinal }};
        } else if (tipoVisita == 'R'){
            argsVisit = {'user' : { "$in" :listaUsuarios }, 'tipo' : { "$in" : ["2005"] }, "createdAt": {"$gte": dataInicial, "$lt": dataFinal }};
        } else if (tipoVisita == 'I'){
            argsVisit = {'user' : { "$in" :listaUsuarios }, 'tipo' : { "$in" : ["2003"] }, "createdAt": {"$gte": dataInicial, "$lt": dataFinal }};
        }

        var initDate = new Date('2015-04-02T00:00:00.000Z');
        var endDate = new Date('2015-05-09T00:00:00.000Z');

       argsMatch = [{ $match : { "createdAt" : { $gte: initDate, $lt: endDate  }} },
                   { $group : { _id : { "usuario" : listaUsuarios , "dia" : { $dayOfMonth : "$createdAt" } },  "visitas" : {$sum : { $cond: [ {$or : [ { $eq: [ "$tipo", "2001"] },{ $eq: [ "$tipo","2002"] }] },1,0 ]}}}
                    }]

      Visita.aggregate(argsMatch)
        .exec(function (err, results) {
                if (err) {
                    console.log("Erro!!!");
                    deferredDados.reject({
                        error: 500,
                        message: 'Erro buscando Visita, erro: '+err
                    });
                } else {
                    if (!results || results.length == 0) {
                        console.log("Sem retorno!!!");
                        deferredDados.resolve( [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] ); //Tudo zerado poruqe não há retorno.
                        //deferredDados.resolve(0);

                        deferredDados.reject({
                            error: 500,
                            message: 'Erro buscando Visitas, não achou resultados'

                        });
                    } else {
                        deferredDados.resolve( results );
                    }

                }

            });
      return deferredDados.promise;       
  })
  .then(function(dados) {
        res.json(dados);

    })
   .catch(function(fallback) {
    console.log('Erro no retorno dos usuarios!!!');
    console.log(fallback);
  }); 
解决了

我的团队成员发现了错误\o/ 也许这可以帮助有同样问题的人

要解决此问题,只需将字符串中的日期转换为日期类型

解决的代码如下:

我希望这能帮助别人





 .then(function (listaUsuarios){
           var argsVisit;
          console.log({ $match : { "createdAt" : { $gte: "2015-01-10T00:00:00.000Z", $lt: "2015-07-01T00:00:00.000Z"  }} },
                  { $group : { _id : { "usuario" : listaUsuarios , "dia" : { $dayOfMonth : "$createdAt" } }, "visitas" : { $sum : 1 } } });

          Visita.aggregate({ $match : { "createdAt" : { $gte: "2015-01-10T00:00:00.000Z", $lt: "2015-07-01T00:00:00.000Z"  }} },
                  { $group : { _id : { "usuario" : listaUsuarios , "dia" : { $dayOfMonth : "$createdAt" } }, "visitas" : { $sum : 1 } } })
            .exec(function (err, results) {
                    if (err) {
                        console.log("Erro!!!");
                        deferredDados.reject({
                            error: 500,
                            message: 'Erro buscando Visita, erro: '+err
                        });
                    } else {
                        if (!results || results.length == 0) {
                            console.log("Sem retorno!!!");
                            deferredDados.resolve( [0,0,0,0,0,0,0] ); //Tudo zerado poruqe não há retorno.
                            //deferredDados.resolve(0);

                            deferredDados.reject({
                                error: 500,
                                message: 'Erro buscando Visitas, não achou resultados'

                            });
                        } else {
                            console.log("Dados"+results);
                            deferredDados.resolve( results );
                            //deferredDados.resolve( results.data] );
                        }

                    }

                });
          return deferredDados.promise;       
      })



.then(function (listaUsuarios){
       var argsVisit;


      if (tipoVisita == 'N'){
            argsVisit = {'user' : { "$in" :listaUsuarios }, 'tipo' : { "$in" : ["2001","2002"] }, "createdAt": {"$gte": dataInicial, "$lt": dataFinal }};
        } else if (tipoVisita == 'R'){
            argsVisit = {'user' : { "$in" :listaUsuarios }, 'tipo' : { "$in" : ["2005"] }, "createdAt": {"$gte": dataInicial, "$lt": dataFinal }};
        } else if (tipoVisita == 'I'){
            argsVisit = {'user' : { "$in" :listaUsuarios }, 'tipo' : { "$in" : ["2003"] }, "createdAt": {"$gte": dataInicial, "$lt": dataFinal }};
        }

        var initDate = new Date('2015-04-02T00:00:00.000Z');
        var endDate = new Date('2015-05-09T00:00:00.000Z');

       argsMatch = [{ $match : { "createdAt" : { $gte: initDate, $lt: endDate  }} },
                   { $group : { _id : { "usuario" : listaUsuarios , "dia" : { $dayOfMonth : "$createdAt" } },  "visitas" : {$sum : { $cond: [ {$or : [ { $eq: [ "$tipo", "2001"] },{ $eq: [ "$tipo","2002"] }] },1,0 ]}}}
                    }]

      Visita.aggregate(argsMatch)
        .exec(function (err, results) {
                if (err) {
                    console.log("Erro!!!");
                    deferredDados.reject({
                        error: 500,
                        message: 'Erro buscando Visita, erro: '+err
                    });
                } else {
                    if (!results || results.length == 0) {
                        console.log("Sem retorno!!!");
                        deferredDados.resolve( [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] ); //Tudo zerado poruqe não há retorno.
                        //deferredDados.resolve(0);

                        deferredDados.reject({
                            error: 500,
                            message: 'Erro buscando Visitas, não achou resultados'

                        });
                    } else {
                        deferredDados.resolve( results );
                    }

                }

            });
      return deferredDados.promise;       
  })
  .then(function(dados) {
        res.json(dados);

    })
   .catch(function(fallback) {
    console.log('Erro no retorno dos usuarios!!!');
    console.log(fallback);
  });