如何在Node.js和Mongoose中的一段时间后更新用户?

时间:2017-06-23 11:40:24

标签: node.js mongodb express mongoose

如何根据用户的有效服务续订日期自动扣除用户可用信用额度?

让我描述一下当前的情况。目前,我正在开发一个Express应用程序,它基本上是一个计费系统,它将自动管理客户端并根据他的活动服务收费。但我卡住了!如果他(用户)没有足够的余额,如何从用户的帐户中自动扣除信用额并续订服务或暂停服务。

这就是我所拥有的。

服务架构:

var mongoose= require('mongoose');
var Schema = new mongoose.Schema({
  user:{
    type: mongoose.Schema.Types.ObjectId,
    ref: "User",
    required: true
  },
  services:{
    username: {type: String, required: true, unique: true},
    package:  {type: String, required: true},
    domain:   {type: String, required: true, unique: true},
    status: String,
    dateAdded: {type: Date, default: Date.now },
    lastRenewed: Date,
    nextRenewal: Date,
    renewalCost: Number // Renewal Cost Of The Service.
  }
})

module.exports  = mongoose.model('Service', Schema);

用户架构:

var mongoose= require('mongoose');

var Schema = new mongoose.Schema({
  name:{
    type: String,
    min: 1,
    required: true
  },
  username:{
        type: String,
        unique: true
  },
  password:{
    type: String, // Storing Hashed Password
    required: true
  },
  salt:{
    type: String
  },
  meta: {
    email: String,
    phone: Number,
    dateOfBarth: String,
    address: {
      companyName: String,
      address1: String,
      address2: String,
      city: String,
      state: String
   }
 },

 credit:{type: Number, default: 0},  // Avilable Credits
 isAdmin: {type: Boolean, default: false} // If The User Is Admin Or Not?


});

module.exports  = mongoose.model('User', Schema);

现在我想在“nextRenewal”日期运行查询或功能(或类似的东西)并从用户的可用Credits中扣除续订成本并保存用户并延长下一个续订日期。

  

答案:使用npmjs.com/package/node-schedule安排工作。

     

感谢@Kilizo

3 个答案:

答案 0 :(得分:0)

您希望findOneAndUpdate服务并使用Populate填充其中的用户对象。

未经测试的代码:

Service.findOneAndUpdate({ _id: serviceId }).populate('user').then((service) => {    
  if(service.user.credit > 10) {
   service.user.credit -= 10;
   service.services.nextRenewal = //newDate;
   service.user.save();
   service.save();
  }
})

答案 1 :(得分:0)

要在下次续订日期自动运行更新功能,您必须使用cron job.Please查找有关cron作业的更多信息:Cron Job

答案 2 :(得分:0)

有两种主要方法:

  • 使用 cron 作业
  • 使用 Windows计划程序

Windows计划程序:您可以使用所需的功能创建项目,并将该项目作为任务添加到Windows计划程序中,并根据您所需的日期安排该任务。

cron :您可以根据所需日期使用cron作业来安排任务。

我建议为此编写一个 cron ,因为它在Web服务器上运行,直到服务器停止工作,而Windows调度程序在本地计算机上运行,​​只有在您的计算机运行时才能运行