sql >> データベース >  >> NoSQL >> MongoDB

フィルタされた配列アイテムだけでMongoDBのオブジェクトを取得する必要があります

    したがって、基本的にはフィルターを実行する必要があります。 MongoTemplate mongodbに多くの操作を提供します。MongoTemplateにいくつかのメソッドが存在しない場合は、Bson Documentを使用できます。 パターン。その場合は、次の記事を試してください:mongoシェルクエリを隠蔽するためのトリック。

    実際には、次のようなMongoクエリが必要です。 $addFieldsの使用 以下に示す方法の1つ。ただし、$projectは使用できます 、$set など。ここで$addFields history_datesを上書きします 。 (ドキュメントに新しいフィールドを追加するためにも使用されます)。

    {
        $addFields: {
            history_dates: {
                $filter: {
                    input: "$history_dates",
                    cond: {
                        $and: [{
                                $gt: ["$$this", "23/07/2020"]
                            },
                            {
                                $lt: ["$$this", "24/07/2020"]
                            }
                        ]
                    }
                }
            }
        }
    }
    

    働くモンゴの遊び場。

    これを春のデータに変換する必要があります。つまり、@Autowired クラスのMongoTemplate。

     @Autowired
        MongoTemplate mongoTemplate;
    

    方法は、

    public List<Object> filterDates(){
    
        Aggregation aggregation = Aggregation.newAggregation(
            a->new Document("$addFields",
                new Document("history_dates",
                    new Document("$filter",
                        new Document("input","$history_dates")
                        .append("cond",
                            new Document("$and",
                                Arrays.asList(
                                    new Document("$gt",Arrays.asList("$$this","23/07/2020")),
                                    new Document("$lt",Arrays.asList("$$this","24/07/2020"))                            
                                )
                            )
                        )
                    )
                )       
            )
        ).withOptions(AggregationOptions.builder().allowDiskUse(Boolean.TRUE).build());
        return mongoTemplate.aggregate(aggregation, mongoTemplate.getCollectionName(YOUR_CLASS.class), Object.class).getMappedResults();
    }
    

    Mongoテンプレートは、$addFieldsの追加メソッドを提供していません および$filter 。したがって、bsonドキュメントパターンを使用します。私はこれを春にテストしていません。




    1. Laravel Redis ::scan('*')が期待されるキーを返すのに、Redis ::keys(' *')が返さないのはなぜですか?

    2. MongoDBからDynamoDBへの移行、パート1

    3. Mongodbのexplain():nscannedとnscannedObjectsの違い

    4. AmazonAWSでの安全なMongoDBデプロイメント