2016-08-03 7 views
0

私は、それぞれが誕生日がISODateの日付形式であるユーザーの集まりがあるとします。例えば。 ISODate("1958-03-23T00:00:00.000Z")。どのように私は、現在のday.Thisの誕生日を持つユーザーを取得するためにjongo集計クエリを使用することができます私は現在持っているものですが、それは誕生日を持つユーザーが存在するにもかかわらず、何も結果を返しません:ユーザーが特定の日付に誕生日を取得したかどうかを確認

Date dateOfBirth = new Date(); 
Integer month = new DateTime(dateOfBirth).getMonthOfYear(); 
Integer day = new DateTime(dateOfBirth).getDayOfMonth(); 
List<User> users= IteratorUtils.toList(userJongo.aggregate(" 
    {$project:_id:1,dateOfBirth:1,name:1}}") 
    .and("{$match :{dateOfBirth.getDate(): {$eq: '"+day+"'}}}") 
    .and("{$match :{dateOfBirth.getMonth()+1: {$eq:'"+month+"'}}}") 
    .and("{$limit:"+limit+"}" 
    .as(User.class).iterator()); 

感謝inadvanceが。

+0

'DateTime'(' Formatter'の静的内部クラスではないと思いますが) 'month'の値をチェックしましたか? 'Date.getMonth()'は0ベースの数値を返します。つまり、8月の場合は8の代わりに7を返し、8の場合は8を返します。 – Thomas

+0

はい@トーマスで '+ 1'を追加しました – Winnie

+0

jongoは分かりませんが、一般的にこの種類のクエリには集約は必要ありません。あなたが記述するのは単一条件の単純なfind()です。 – mtj

答えて

0

ユーザーの誕生日を文字列として保存し、そのフィールドにインデックスを追加する方法について説明します。 この場合、パフォーマンスが向上します。 あなたは確かに集約を使いたくありません。 クエリの直前に、DBに保存する文字列に現在の日付 - >形式を取得します。 - 結果を取得した後、db.find({birthDate: "0425(this april 25)"}) - >

関連する問題