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