Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.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
Javascript 使用新日期重复mongo文档_Javascript_Mongodb_Mongoose - Fatal编程技术网

Javascript 使用新日期重复mongo文档

Javascript 使用新日期重复mongo文档,javascript,mongodb,mongoose,Javascript,Mongodb,Mongoose,我正在使用Mongo DB为客户机创建事件日历。在面向公众的一面,用户将能够查看事件,并将它们添加到他们手机上的日历中,我正在使用手机。我遇到的问题是,每周的活动很少发生变化,如果它们发生变化的话,可能是教练的名字,或者是房间的变化。因此,在管理员端,当管理员创建一个事件时,他们将能够单击重复事件直到“X”日期。在服务器上,我需要重新创建文档,直到事件的开始时间或结束时间等于重现日期 我的事件架构如下所示: var activitySchema = mongoose.Schema({ "

我正在使用Mongo DB为客户机创建事件日历。在面向公众的一面,用户将能够查看事件,并将它们添加到他们手机上的日历中,我正在使用手机。我遇到的问题是,每周的活动很少发生变化,如果它们发生变化的话,可能是教练的名字,或者是房间的变化。因此,在管理员端,当管理员创建一个事件时,他们将能够单击重复事件直到“X”日期。在服务器上,我需要重新创建文档,直到事件的开始时间或结束时间等于重现日期

我的事件架构如下所示:

var activitySchema = mongoose.Schema({
    "room": String,
    "type": String,
    "title" : String,
    "start": {type: Date},
    "end": {type: Date},
    "instructor" : String,
    "desc": String,
    "image": String,
    "style": {
        "backgroundColor": String
    }
})
当用户点击创建表单上的submit时,将触发:

onSubmit() {
    var startTime = {start: this.state.start || this.state.data};
    var endTime = {end: this.state.end || this.state.data};
    var color = {style: {backgroundColor: this.state.color || this.state.data}}
    var image ={image: this.state.image || this.state.data};

    var myForm = this.refs.MyForm.getValue();
    var payload = _.merge(myForm, startTime, endTime, color, image);
    if (payload._id) {
        superagent.put("http://"+this.context.config.API_SERVER+"/api/v1.0/activity/").send(payload).end((err, res) => {
            err ? console.log(err) : console.log(res);
        });
    } else {
        delete payload._id; //remove the empty id object from the post since it's blank.
        superagent.post("http://"+this.context.config.API_SERVER+"/api/v1.0/activity/").send(payload).end((err, res) => {
            err ? console.log(err) : console.log(res);
            this.refs.MyForm.reset();
        });
    }
},
所以我需要做的是,当他们点击submit时,它会一次又一次地重复文档,但是随着日期增加了7天,所以它会在每周的同一天重复

现在,它只是为选定的日期和时间一次创建一个事件,并显示在日历上。我正在使用MomentJS进行时间处理,我本来打算尝试使用MomentRecur,但安装时出现错误,但这似乎是一个尚未解决的常见问题


任何帮助或建议都会很棒,我不是一个后端人员,我不知道如何做到这一点

我们有非常相似的要求,最终使用了这个npm包:

这允许管理真实的iCal对象,这些对象由Outlook、Google calendar等典型日历应用程序识别。Is支持重复事件,因此您只需要一个具有重复定义的事件对象。 如果需要定期事件的发生,则有一个
getoccurrences()
函数。不幸的是,文档很少,单元测试是最好的开始

不过,在iCal、Outlook等领域,您可能需要重新考虑事件的数据模型。。。重复发生的事件只是一个事件,而不是多个


在客户端(web应用程序),我们使用了此服务:
https://www.addevent.com/
允许用户将重复事件添加到日历中。

我们有非常类似的要求,最终使用了此npm包:

这允许管理真实的iCal对象,这些对象由Outlook、Google calendar等典型日历应用程序识别。Is支持重复事件,因此您只需要一个具有重复定义的事件对象。 如果需要定期事件的发生,则有一个
getoccurrences()
函数。不幸的是,文档很少,单元测试是最好的开始

不过,在iCal、Outlook等领域,您可能需要重新考虑事件的数据模型。。。重复发生的事件只是一个事件,而不是多个


在客户端(web应用程序),我们使用了此服务:
https://www.addevent.com/
允许用户将重复事件添加到日历中。

因此我最终解决了我的问题。虽然这可能不是重复事件的最佳方式,但这是我被告知要在我周围的多个人中做的事情

if(this.refs.repeatCheckbox.checked){
      //let endRepeat = moment().endOf("month").format();
      let endRepeat = moment(this.state.repeat).add({days: 1}).format();
      let start = moment(this.state.start).format();
      let end = moment(this.state.end).format();

      do {
        let newStart = {start: start};
        let newEnd = {end: end};

        var myForm = this.refs.MyForm.getValue();
        var payload = _.merge(myForm, newStart, newEnd, color, image);

        if (payload._id) {
            superagent.put("http://"+this.context.config.API_SERVER+"/api/v1.0/activity/").send(payload).end((err, res) => {
                err ? console.log(err) : console.log(res);
            });
        } else {
            delete payload._id; //remove the empty id object from the post since it's blank.
            superagent.post("http://"+this.context.config.API_SERVER+"/api/v1.0/activity/").send(payload).end((err, res) => {
                err ? console.log(err) : console.log(res);
                this.refs.MyForm.reset();
            });
        }

        start = moment(start).add({days: 7}).format();
        end = moment(end).add({days: 7}).format();
      } while (end < endRepeat);
    } else {
      var myForm = this.refs.MyForm.getValue();
      var payload = _.merge(myForm, startTime, endTime, color, image);

      if (payload._id) {
          superagent.put("http://"+this.context.config.API_SERVER+"/api/v1.0/activity/").send(payload).end((err, res) => {
              err ? console.log(err) : console.log(res);
          });
      } else {
          delete payload._id; //remove the empty id object from the post since it's blank.
          superagent.post("http://"+this.context.config.API_SERVER+"/api/v1.0/activity/").send(payload).end((err, res) => {
              err ? console.log(err) : console.log(res);
              this.refs.MyForm.reset();
          });
      }
    };
if(this.refs.repeatCheckbox.checked){
//让endRepeat=moment().endOf(“月”).format();
让endRepeat=矩(this.state.repeat).add({days:1}).format();
让开始=时刻(this.state.start).format();
让end=moment(this.state.end).format();
做{
让newStart={start:start};
设newEnd={end:end};
var myForm=this.refs.myForm.getValue();
var payload=u2;.merge(myForm、newStart、newEnd、color、image);
如果(有效载荷.\u id){
superagent.put(“http://“+this.context.config.API_SERVER+”/API/v1.0/activity/”).send(payload.end((err,res)=>{
err?console.log(err):console.log(res);
});
}否则{
删除有效负载。_id;//从post中删除空id对象,因为它是空的。
superagent.post(“http://“+this.context.config.API_SERVER+”/API/v1.0/activity/”).send(payload.end((err,res)=>{
err?console.log(err):console.log(res);
this.refs.MyForm.reset();
});
}
开始=时刻(开始).add({days:7}).format();
end=时刻(end).add({days:7}).format();
}while(end{
err?console.log(err):console.log(res);
});
}否则{
删除有效负载。_id;//从post中删除空id对象,因为它是空的。
superagent.post(“http://“+this.context.config.API_SERVER+”/API/v1.0/activity/”).send(payload.end((err,res)=>{
err?console.log(err):console.log(res);
this.refs.MyForm.reset();
});
}
};

因此,如果用户选中repeat(重复)框,并输入他们希望重复til的日期,它将循环提交函数并添加7天,直到结束日期等于所选的重复日期。如果他们不选中该框并选择日期,则只会创建一个事件。可能不是最好的解决方案,但它很有效,而且它与我正在使用的日历配合使用

所以我最终解决了我的问题。虽然这可能不是重复事件的最佳方式,但这是我被告知要在我周围的多个人中做的事情

if(this.refs.repeatCheckbox.checked){
      //let endRepeat = moment().endOf("month").format();
      let endRepeat = moment(this.state.repeat).add({days: 1}).format();
      let start = moment(this.state.start).format();
      let end = moment(this.state.end).format();

      do {
        let newStart = {start: start};
        let newEnd = {end: end};

        var myForm = this.refs.MyForm.getValue();
        var payload = _.merge(myForm, newStart, newEnd, color, image);

        if (payload._id) {
            superagent.put("http://"+this.context.config.API_SERVER+"/api/v1.0/activity/").send(payload).end((err, res) => {
                err ? console.log(err) : console.log(res);
            });
        } else {
            delete payload._id; //remove the empty id object from the post since it's blank.
            superagent.post("http://"+this.context.config.API_SERVER+"/api/v1.0/activity/").send(payload).end((err, res) => {
                err ? console.log(err) : console.log(res);
                this.refs.MyForm.reset();
            });
        }

        start = moment(start).add({days: 7}).format();
        end = moment(end).add({days: 7}).format();
      } while (end < endRepeat);
    } else {
      var myForm = this.refs.MyForm.getValue();
      var payload = _.merge(myForm, startTime, endTime, color, image);

      if (payload._id) {
          superagent.put("http://"+this.context.config.API_SERVER+"/api/v1.0/activity/").send(payload).end((err, res) => {
              err ? console.log(err) : console.log(res);
          });
      } else {
          delete payload._id; //remove the empty id object from the post since it's blank.
          superagent.post("http://"+this.context.config.API_SERVER+"/api/v1.0/activity/").send(payload).end((err, res) => {
              err ? console.log(err) : console.log(res);
              this.refs.MyForm.reset();
          });
      }
    };
if(this.refs.repeatCheckbox.checked){
//让endRepeat=moment().endOf(“月”).format();
让endRepeat=矩(this.state.repeat).add({days:1}).format();
让开始=时刻(this.state.start).format();
让end=moment(this.state.end).format();
做{
让newStart={start:start};