MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Saya perlu mengambil objek MongoDB hanya dengan item array yang difilter

Jadi pada dasarnya Anda perlu melakukan filter. MongoTemplate menawarkan banyak operasi untuk mongodb, jika beberapa metode tidak ada di MongoTemplate, kita dapat menggunakan Bson Document pola. Dalam hal ini, coba artikel ini:Trik untuk menyembunyikan kueri mongo shell.

Sebenarnya Anda memerlukan kueri Mongo seperti mengikuti. Menggunakan $addFields salah satu metode yang ditunjukkan di bawah ini. Tetapi Anda dapat menggunakan $project , $set dll. Di sini $addFields menimpa history_dates . Anda . (Digunakan untuk menambahkan bidang baru ke dokumen juga).

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

Taman bermain Mongo yang berfungsi.

Anda perlu mengubahnya menjadi data pegas. Jadi @Autowired MongoTemplate di kelas Anda.

 @Autowired
    MongoTemplate mongoTemplate;

Caranya adalah,

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();
}

Template Mongo tidak menyediakan metode penambahan untuk $addFields dan $filter . Jadi kita hanya pergi dengan pola dokumen bson. Saya belum menguji ini di Musim Semi.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana saya bisa membuat daftar semua koleksi di shell MongoDB?

  2. Bisakah mongo memasukkan data array?

  3. 5 Cara Memeriksa Ukuran Koleksi di MongoDB

  4. MongoDB $sort

  5. Filter sub array dari array dengan beberapa kriteria