我需要在集合(事件)中找到某些文档,然后遍历它们并更改每个文档中的部分数据,然后更新集合中的这些文档。这是我的代码:
Event.find({linkId: linkId}).then(
docs => {
docs.forEach((doc) => {
newTitle = doc.title.split('-')[0] + ' - ' + eventDuration + ' days';
console.log(newTitle);
Event.update({_id: doc._id}, {title: newTitle});
})
}
);
控制台显示我收到了每个必需文档的标题,并根据需要对其进行了修改,但是,修改后的数据不会重新插入到集合中。
很感谢任何形式的帮助。谢谢================================================ ===============
第2部分。更多信息
这是基于“ fullcalendar”软件包的交互式日程表Web应用程序的一部分。网络日历上有两个部分-项目和人事。用户在Project部分中创建新事件,这将在mongo DB中创建两个文档(方案在下面)。
活动方案:
eventSchema = new mongoose.Schema({
id: {
type : mongoose.Schema.Types.ObjectId,
default : mongoose.Types.ObjectId,
index : { unique: true }
},
title: String,
start: Date,
end: Date,
linkId: String});
这两个文档具有相同的开始/结束日期,linkID,但标题不同。JS根据事件的显示位置创建标题:在Project部分中,它是“人名-XY天”,在Personnel部分中,它是“项目名-XY天”,其中XY = endDate-startDate。用户能够在日历中动态调整事件大小,以更新数据库中的相应文档。更新日期不是问题,但是更改标题会更加复杂。最初,我使用下面的代码,但后来发现使用updateMany
方法使两个标题相同,即,如果用户在“项目”日历部分中调整事件的大小,则两个标题均变为“人名-XY天”,如果在“人事”部分中,则标题变为“项目名-XY天”。因此,我现在要实现的是,当用户调整日历中事件的大小时,JS使用linkID在数据库中找到相应的两个文档,循环浏览它们,更新日期,并根据新的事件持续时间仅更新标题中的XY。希望我有一个想法)。先感谢您
var result = req.body,
startDate = new Date(result.newStartDate),
newStartDate = startDate.setUTCHours(12),
endDate = new Date(result.newEndDate),
newEndDate = endDate.setUTCHours(12),
linkId = result.linkId,
title = result.title,
trimmedTitle = originalTitle.split('-')[0],
eventDuration = ((newEndDate - newStartDate) / 86400000) + 1;
newTitle = trimmedTitle + '- ' + eventDuration + ' days';
Event.updateMany({linkId: linkId}, {start: newStartDate, end: newEndDate, title: newTitle};
我找到了答案。而不是使用collection.save.(doc)
或collection.update(doc)
我使用collection.create(doc)
,它的工作原理。最后,代码如下所示:
Event.find({linkId: linkId}).exec((err, docs) => {
docs.forEach(doc => {
doc.start = startDate;
doc.end = endDate;
doc.duration = eventDuration;
oldTitle = doc.title;
doc.title = oldTitle.split('-')[0] + ' - ' + eventDuration + ' days';
Event.create(doc, (err)=>{
if(err){
console.log(err);
};
});
});
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句