1

我正在创建一个 MongoDB 查询,返回今天生日的用户,所以我在 $where 语句中创建了这个 JS 函数:

function() {
    if (! this.birthday.getMonth) {return false;}

    return this.birthday.getMonth() == 1
    && this.birthday.getDate() == 1
}

不幸的是,如果没有为文档设置生日字段,if 语句似乎不起作用,因为我有一个错误:

JS Error: TypeError: this.birthday has no properties nofile_18

欢迎任何帮助。

4

2 回答 2

0

假设生日字段存储为 Date 或 ISODate 类型,您可以使用聚合框架进行正确比较。我认为它会比启动 javascript shell 的 $where 更快。

// construct "thisMonth" variable which is current month as a number
// and thisDay which is current date of the month as a number
> var thisMonth = 5;
> var thisDay = 1;
> db.people.aggregate( [ 
        {$project:{month:{$month:"$birthday"}, date:{$dayOfMonth:"$birthday"}}},
        {$match: {month:thisMonth, date: thisDay}}
  ] )
于 2013-05-01T17:40:13.120 回答
0

我终于解决了在$exists前面加上 $where 语句的问题。它现在可以正常工作,即使“生日”字段不存在。

于 2013-05-02T10:11:06.923 回答