2017-11-09 7 views
-1

を動作していない検索これは私のモデルである:Mangooseネストされたが

UserModel = mongoose.Document & { 
    username: string, 
    password: string, 
    records: Record[] 
}; 
Record: { 
    name: string; 
    date: Date; 
} 

問合せ:

const date = new Date(); 
    const lastDate = new Date(date.getTime() - (30 * 24 * 60 * 60 * 1000)); 
    UserModel.find({ "records" : { "$elemMatch": { "date" : { "$gte": lastDate } } }}, (err, userRecords: any) => { 
    if (err) { 
     return res.json({ 
      "status": "error", 
      "detail": err 
     }); 
    } 
    return res.json({ 
     "records": userRecords 
    }); 
    }); 

は、このクエリではなく、単に過去30日間のレコードよりも、すべてのレコードを返します。私はどこに間違っているのかを見つけることができません。

編集:上記のlastDateの "lastDate.toISOString()"を使用した後でも、私はまだすべての結果を返します。

編集: "$ filter"のような他の解決方法はテストされていませんが、それでもすべてのレコードが返されます。

+0

'.find()'クエリは、返される配列内容を「フィルタ」しません。そのタスクは['$ filter'](https://docs.mongodb.com/manual/reference/operator/aggregation/filter/)に属します。 –

+0

' date'が 'Records'文書に格納されている形式を確認してください。 Mongoではフィールドのフィルタ条件がフォーマットに合致しない場合は、コレクション全体を返します – Abhishek

+0

@Abhishekそのフォーマットとして保存されています – Don

答えて

0

データベースに格納されているISO形式に日付を変換する必要があります。

+0

"{" $ gte ":lastDate.toISOString()}"という変更を行った後、レコードは返されません。これを確実にするために日付を保存している間は何か注意を払う必要がありますか? – Don

+0

データベースに保存されている日付の形式は何ですか? –

+0

ISOの日付フォーマット – Don

関連する問題