Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.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 Meteor:如何使用Momentjs在Mongodb中添加和查询日期_Javascript_Mongodb_Meteor_Momentjs - Fatal编程技术网

Javascript Meteor:如何使用Momentjs在Mongodb中添加和查询日期

Javascript Meteor:如何使用Momentjs在Mongodb中添加和查询日期,javascript,mongodb,meteor,momentjs,Javascript,Mongodb,Meteor,Momentjs,我想展示今天到期的所有物品。我的夹具数据一切正常。但新添加的对象不会显示 固定装置 ... var today = moment().toDate(); Cards.insert({ deckName: javascriptId, due: today, front: 'blaablaa', back: 'blaablaablaa' }); ... 显示对象 Template.showCards.helpers(

我想展示今天到期的所有物品。我的夹具数据一切正常。但新添加的对象不会显示

固定装置

...
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.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
        });
    }
});
添加新的截止日期以隐藏对象

    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.showCards.helpers({
    cards: function () {
        var end = moment().toDate();

        return Cards.findOne({
            deckName: this._id,
            due: {"$lte": end}
        });
    }
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
        });
    }
});
新对象将被正确添加到数据库中,但由于某些原因,它们不会显示。

时刻()。toDate()
返回一个
日期
对象,该对象指定一个精确的时间点(例如1/4/15 16:32:12),而不是一天的结束或开始。存储到期日时请记住这一点

每当你的卡片助手运行时,它会及时找到一个准确的时刻,并检查所有少于该准确时刻到期的卡片。添加新卡不会强制助手重新运行,因为它们不符合条件。换句话说,你的
结尾
不是反应性的,太具体了

您只需将
end
设置为一天的实际结束,即可解决此问题:

var end=moment().endOf('day').toDate();
此外,您的助手正在使用
findOne
而不是
find
,因此您只能获得一张卡,而不是与选择器匹配的所有卡。如果只想查看最后更新的卡,请修改辅助对象,如下所示:

returncards.findOne({deckName:this.\u id,到期:{$lte:end}},{sort:{due:-1}});

最后,您需要解决如何加入牌组和牌组。在fixture中,您使用的是
deckName
的id,然后在提交中,您使用的是deck的名称,最后在
cards
助手中,您使用的是id。选择一种方法并坚持使用。我建议调用字段
deckId
,并且只使用id(注意,这需要修改提交以按名称查找deck,然后使用相应的id)。

否。什么也没发生。我以前也尝试过刷新页面等。当I console.log
end
时,对象中的时间超过了到期时间。新卡是否已发布到客户端?您可以从web控制台查询它们吗?可以。我可以查询,但我仍然有自动发布和不安全的包。哦。。。您的
助手正在使用
findOne
而不是
find
。是的,这是故意的。我想一次只显示一个对象,然后为它设置新的截止日期,这样它就会消失,然后第二个对象就会出现。