Mongoose,函数不能在未定义的查询函数上执行

我试图用今天的date作为search的领域 – 在这个时候,不用担心整合moment.js库。 “表格”中只有今天的date。

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:无法在'createdOn.toJSON()。slice(0,10)== Date.n'(line 2)附近的_funcs1(_funcs1:2:26)处调用方法'toJSON'

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

我是否错误地构build查询? 如果是这样的话,需要改变的function,以便我可以过滤条件?

这里的问题是缺乏对基于文档的存储中数据结构的理解。 每个文档都必须包含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评估。

你得到这个错误一个CreatedOn不存在于每个文件。 你可以这样解决这个问题:

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