2017-11-27 4 views
0

私は、ユーザーがデータをアップロードできる製品で作業しており、アップロード中にデータのデータ型が動的に取得されます。私はmongodbにデータを保存しています。ユーザーは、データをセグメント化するためにフロントエンドにルールを書き込むことができます。要件の1つは、ルールは、生年月日が今日のすべてのレコードを見つけるような方法で与えられることです。そのため、私は月に&月までに文書をフィルタリングする必要があります。現時点では、ユーザーが指定したルールに基づいてBasicDBObjectとしてmongoクエリ(Java)を構築しています。MongoDB:集計なしの今日の生年月日までのデータの検索/フィルタリング

フィルタは、$ date.month = 12 & & $ date.day = 10(生年月日が12月10日になるすべてのレコードを取得するため)のようにする必要があります。

Mongoクエリーでどのように達成されるかを助けることができますか?

+0

可能な複製(https://stackoverflow.com/questions/18907566/mongodb-query-specific-monthyear-not-date)私はこれを達成したいいけない – dnickless

+0

集約して。ここでやっている実際のプロセスImは、すべてのドキュメントを取得し、フィルタと投影を適用してそれらを繰り返します。私は集計を使用していません。 – Preetham

答えて

0

これは、ドキュメントを繰り返し処理する方法です。ここには集計はありません。

MongoCollection<Document> mongoCollection = mongoDatabase.getCollection(collectionName); 
    FindIterable<Document> iterable; 
    iterable = (ruleQuery == null) ? mongoCollection.find().limit(limit).skip(skipCount) : mongoCollection.find(ruleQuery).limit(limit).skip(skipCount); 
    iterable = (projectionFieldsQuery == null) ? iterable : iterable.projection(projectionFieldsQuery); 
    iterable = (sortQuery == null) ? iterable : iterable.sort(sortQuery); 
    return iterable.iterator(); 
0

アグリゲーションフレームワークの使用に問題はありません。とにかく、遅かれ早かれすべてのクエリのデフォルトになるだろうと言っています。少なくとも内部的には...

それでも、日付演算子がないため、効果的に3つのオプションがあります「通常」のクエリのために:https://docs.mongodb.com/manual/reference/operator/query/where/

  • あなたは、個々のフィールドに日付部分の情報(おそらくさらに)を格納し、簡単に使用することができます

    1. あなたは、超効率的ではないでしょう$どこ演算子を使用しようとする可能性がありそれらはあなたの質問に含まれています。これらのフィールドは索引付けされるので、これは高速になります。
    2. 日付はUnixタイムスタンプとしてMongoDB(https://docs.mongodb.com/manual/reference/method/Date/)に保存されます。したがって、関連する数値または範囲を計算し、長い値を使用してそれらにアクセスすることができます。
    [MongoDBのクエリ特定の月|年ません日付]の
  • 関連する問題