我是MongoDB和NodeJS的新手。我想使用NodeJS从另一个集合进行汇总。
问题是我有集合名称test1
,其中有一些字段,例如rcptid, rcptdate, ammount
等。
现在,我必须将数据插入test2
集合中的另一个集合rcptdate,totalamount
test1
。
这样的SQL查询:
Insert into teste(rcptdate, totalamount) values(Select
recptdate,Sum(amount) from test1 group by recptdate);
如何在NodeJS中做到这一点?请提前帮助我。
答案 0 :(得分:1)
我建议您浏览MongoDB documentation。
对于您的特定问题,请检查$group和aggregation
A。。如果您的日期不随时间变化,则可以使用以下汇总:
db.getCollection('tests').aggregate([{
$group : {
_id : "$rcptdate",
"totalAmmount" : {
"$sum" : "$ammount"
}
}
}]);
输出:
/* 1 */
{
"_id" : ISODate("2018-10-24T00:00:00.000Z"),
"totalAmmount" : 3
}
/* 2 */
{
"_id" : ISODate("2018-10-23T10:00:00.000Z"),
"totalAmmount" : 10
}
B。。如果您想在day of the month
之前输入日期,请使用以下汇总:
db.getCollection('tests').aggregate([{
$group : {
_id : {
"day" : {"$dayOfMonth" : "$rcptdate"}
},
"totalAmmount" : {
"$sum" : "$ammount"
}
}
}])
输出:
/* 1 */
{
"_id" : {
"day" : 24
},
"totalAmmount" : 3
}
/* 2 */
{
"_id" : {
"day" : 23
},
"totalAmmount" : 16
}
而且,如何使用mongoose库在NodeJS中实现。
let pipeline = [{
$group : {
_id : "$rcptdate",
"totalAmmount" : {
"$sum" : "$ammount"
}
}
}];
test1Model.aggregate(pipeline) // Get data from here
.allowDiskUse(true)
.exec(function(err, data) {
if(err || !data || !data[0]){
Logger.error("Error ");
} else{
let tempObj = data[0];
var test2 = new Test2Model(tempObj);
test2.save(function(error, data) { // Insert data to next DB
callback(error, data);
});
}
});