Mongdb使用Node.js Api将数据插入另一个集合的集合中

时间:2018-10-23 04:34:03

标签: node.js mongodb

我是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中做到这一点?请提前帮助我。

1 个答案:

答案 0 :(得分:1)

我建议您浏览MongoDB documentation
对于您的特定问题,请检查$groupaggregation

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);
      });
    }
  });