2013-05-01 19 views
1

我創建一個MongoDB的查詢返回的生日是今天的用戶,所以我創造了這個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 

任何幫助歡迎。

+0

你可以在this.birthday上檢查null,但是你爲什麼要通過$ where來做這件事? – Sammaye 2013-05-01 16:39:25

+0

您能否包含您正在查詢的文檔結構示例?即db.collection.findOne(),所以我們可以看到你正在查詢什麼? – 2013-05-01 16:44:51

+0

@Sammaye我在哪裏使用,因爲這是我可以從日期檢索日期和月份的唯一方式,以查看它是否是用戶的生日。 – 2013-05-01 17:06:36

回答

0

我終於解決了我的問題,在$exists前面加上$ where語句。即使在'生日'字段不存在的情況下,它現在也可以正常工作。

0

假設生日字段存儲爲類型Date或ISODate,則可以使用聚合框架進行正確的比較。我認爲它會比啓動javascript shell的$更快。

// 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}} 
    ]) 
+0

因爲他把年份存儲到找到它的日期變得複雜了,因爲他們本來可能在1988年出生,但今年是2013 – Sammaye 2013-05-01 17:48:06

+0

是的,這就是爲什麼我要求文檔 - 很難正確地形象化這種事情!將其更改爲應該工作的agg框架。 – 2013-05-01 18:17:06

+0

@AsyaKamsky我會試一試,讓你知道它是否工作,即使當$生日字段不在文檔中。 – 2013-05-01 22:29:54