[英]Meteor: How to add and query Dates in Mongodb with Momentjs
我想展示今天到期的所有物品。 一切都适用于我的夹具数据。 但是新添加的对象不会显示出来。
夹具
...
var today = moment().toDate();
Cards.insert({
deckName: javascriptId,
due: today,
front: 'blaablaa',
back: 'blaablaablaa'
});
...
显示对象
Template.showCards.helpers({
cards: function () {
var end = moment().toDate();
return Cards.findOne({
deckName: this._id,
due: {"$lte": end}
});
}
添加新的截止日期以隐藏对象
Template.showCards.events({
...
'click #difficulty button': function(event) {
var incBy = parseInt(event.target.value);
console.log(incBy);
console.log(typeof incBy);
var today = moment();
var newDue = moment(today).add(incBy,'days').toDate();
Cards.update(
this._id, {
$set: {due: newDue}
}
);
}
});
添加新对象
Template.addCards.events({
'submit form': function (event, template) {
event.preventDefault();
var deckNameVar = event.target.deckName.value;
var frontVar = event.target.front.value;
var backVar = event.target.back.value;
var today = moment().toDate();
Cards.insert({
deckName: deckNameVar,
due: today,
front: frontVar,
back: backVar
});
}
});
新对象将正确添加到数据库中,但由于某种原因它们不会显示。
moment().toDate()
返回一个Date
对象,它指定一个确切的时刻(例如16:32:12的1/4/15)而不是一天的结束或开始。 存储截止日期时请记住这一点。
每当你的卡助手运行时,它会找到确切的时刻,并检查所有卡的到期时间。 添加新卡不会强制帮助程序重新运行,因为它们不符合条件。 换句话说,你的end
不是反应性的,也不是特定的。
你可以通过使end
成为当天的实际结束来解决这个问题:
var end = moment().endOf('day').toDate();
此外,您的助手使用的是findOne
而不是find
因此您只能获得一张卡而不是所有与选择器匹配的卡。 如果您只想查看最后更新的卡,请修改您的帮助,如下所示:
return Cards.findOne({deckName: this._id, due: {$lte: end}}, {sort: {due: -1}});
最后,您需要解决加入套牌和卡片的方式。 在你的灯具中你使用了一个id为deckName
,然后在你的提交中你使用了牌组的名称,最后在你的cards
助手中你正在通过id搜索。 选择一种方式并坚持下去。 我建议调用field deckId
并仅使用id(注意这需要修复你的提交以按名称查找套牌然后使用相应的id)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.