2017-05-08 6 views
0

私はデバイスの状態レコードを保持するmongoコレクションを持っています。したがって、デバイスごとに複数のレコードが存在する可能性があります。私がしたいのは、各デバイスの最新のレコードを取得するmongoTemplateを通してクエリを作成することです。 Mongo DB /重複なし

  • は、各デバイスのための唯一の最新のレコードを取得設定<「文字列」で

    • パス> Mongoのコレクション内のname_ids、通常のフィールドではない_idまたは_id内で見つかった:ここ

      は、制約ですマッチングNAME_ID

    • リターンリスト< 'DeviceStateData'>(NO重複が同じNAME_IDを発見されるべきではない)のコル

    例ectionオブジェクト:
    {
    _id: "241324123412"、
    NAME_ID: "flyingMan"、
    のPowerState: "ON"、
    タイムスタンプ:ISODate( '')
    }

    おかげ

  • 答えて

    1

    あなたが見えるはずですDistinctに機能します。

    Here詳細は、Springを参照してください。

    0

    以下のアグリゲーションパイプラインを試すことができます。

    以下のクエリは、ソートされた文書からの最初のものを選択するname_id$group続いname_idtimeStamp上のドキュメントを$sortます。

    $$ROOT文書全体を保持する。

    import static org.springframework.data.mongodb.core.aggregation.Aggregation.newAggregation; 
    import static org.springframework.data.mongodb.core.query.Criteria.where; 
    
    Aggregation aggregation = newAggregation(
           match(findCriteria), 
           sort(new Sort(Sort.Direction.DESC, "name_id", "timeStamp")), 
           group("name_id").first("$$ROOT").as("latest")); 
    
    List<DeviceStateData> deviceData = mongoTemplate.aggregate(aggregation, DeviceStateData.class, DeviceStateData.class).getMappedResults(); 
    
    +0

    残念ながら、私は現在のバネデータの依存関係でアグリゲーションを使用することができず、簡単に変更することはできません。しかし、あなたの返信をありがとう。 – Sam