Mongoose,函数无法在未定义的情况下执行,来自查询函数

时间:2016-02-24 15:21:33

标签: javascript node.js mongodb

我正在尝试使用今天的日期作为其中的字段 搜索 - 此时此刻,无需担心集成 moment.js 库。今天的日期只有一个记录在“表格”中。

app.dashboardreport
    .findOne()
    .$where(function() {
        return this.createdOn.toJSON().slice(0, 10) == Date.now().toJOSN().slice(0, 10);
    })
    .exec(function(err, foundDashboardReport) {

$where函数抛出错误。

  

MongoError:TypeError:无法调用未定义的方法'toJSON'       at_funcs1(_funcs1:2:26)'createdOn.toJSON()附近.tieple(0,10)== Date.n'(第2行)

看来“这个”可能没有定义;但是,我知道有一个符合这些标准的记录。

我是否错误地构建了查询?如果是,那么需要在函数中进行哪些更改以便我可以过滤该条件?

2 个答案:

答案 0 :(得分:1)

这里的问题是缺乏对基于文档的存储中数据结构的理解方式的理解。每个文档必须包含createdOn字段 - 如果不存在,则会收到此错误。 this已定义; createdOn不是。

如果您的数据不统一,则需要评估字段的存在。所以,它可能看起来像这样:

app.dashboardreport
    .findOne()
    .$where(function() {
        /* The check for the field createdOn ensures that the compared document 
           does indeed contain the field */
        return this.createdOn && this.createdOn.toDateString() == new Date().toDateString();
    })

请注意在return语句中添加this.createdOn评估。

答案 1 :(得分:0)

您收到此错误,每个文档中都没有CreatedOn。你可以这样来解决这个问题:

(this.createdOn|| new Date('31 Dec 9999')).toJSON()