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

mongodb mongoTemplate mendapatkan bidang yang berbeda dengan beberapa kriteria

Untuk satu hal .getCollection() metode mengembalikan objek koleksi Driver dasar seperti ini:

DBCollection collection = mongoTemplate.getCollection("collectionName");

Jadi jenis objek kueri mungkin berbeda dari yang Anda gunakan, tetapi ada juga beberapa hal lain. Yaitu .distinct() hanya mengembalikan nilai "berbeda" dari kunci yang Anda minta, dan tidak mengembalikan bidang dokumen lainnya. Jadi Anda bisa melakukan:

Criteria criteria = new Criteria();
criteria.where("dataset").is("d1");
Query query = new Query();
query.addCriteria(criteria);
List list = mongoTemplate.getCollection("collectionName")
    .distinct("source",query.getQueryObject());

Tapi itu hanya akan mengembalikan "sampel" sebagai satu elemen dalam daftar misalnya.

Jika Anda ingin "bidang" dari set yang berbeda, gunakan .aggregate() metode sebagai gantinya. Dengan kemunculan "pertama" dari nilai bidang lain untuk kunci yang berbeda:

    DBCollection colllection = mongoTemplate.getCollection("collectionName");

    List<DBObject> pipeline = Arrays.<DBObject>asList(
        new BasicDBObject("$match",new BasicDBObject("dataset","d1")),
        new BasicDBObject("$group",
            new BasicDBObject("_id","$source")
                .append("name",new BasicDBObject("$first","$name"))
                .append("description", new BasicDBObject("$first","$description"))
        )
    );

    AggregationOutput output = colllection.aggregate(pipeline);

Atau nilai "berbeda" yang sebenarnya dari beberapa bidang, dengan menjadikannya semua bagian dari kunci pengelompokan:

    DBCollection colllection = mongoTemplate.getCollection("collectionName");

    List<DBObject> pipeline = Arrays.<DBObject>asList(
        new BasicDBObject("$match",new BasicDBObject("dataset","d1")),
        new BasicDBObject("$group",
            new BasicDBObject("_id",
                new BasicDBObject("source","$source")
                    .append("name","$name")
                    .append("description","$description")
            )
        )
    );

    AggregationOutput output = colllection.aggregate(pipeline);

Ada juga .aggregate() direct langsung metode pada instance mongoTemplate sudah, yang memiliki sejumlah metode pembantu untuk membangun saluran pipa. Tapi ini setidaknya harus mengarahkan Anda ke arah yang benar.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Dapatkan nilai kembali dari fungsi reactmongo findAndUpdate

  2. Menggunakan fungsi tahan lama di aplikasi fungsi biru dengan mongodb

  3. Grup Mongoid Oleh atau grup MongoDb oleh dalam rel

  4. Perbarui atau tambahkan ke subkoleksi di mongo

  5. Mongo:kueri dengan kunci sedalam satu tingkat