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

Ambil Nilai dari MongoDB dengan Nama Kuncinya

1. Ikhtisar

Dalam tutorial ini, kita akan belajar cara mengambil nilai dari MongoDB dengan nama kunci. Kami akan menjelajahi berbagai metode MongoDB, untuk mengambil nama bidang utama dokumen berdasarkan filter yang diterapkan. Pertama, kita akan menggunakan find atau selesai metode untuk mengambil data yang diperlukan dan kemudian menggunakan agregasi metode. Di sini, kita akan menulis kueri dalam kueri shell MongoDB dan kode driver Java.

Mari kita lihat berbagai cara untuk mengambil nilai di MongoDB dengan nama bidang.

2. Inisialisasi Basis Data

Untuk memulai, kita perlu menyiapkan database baru baeldung dan koleksi baru, perjalanan :

use baeldung;
db.createCollection(travel);

Sekarang mari tambahkan beberapa data dummy ke dalam koleksi menggunakan insertMany metode MongoDB:

db.travel.insertMany([
{ 
    "passengerId":145,
    "passengerName":"Nathan Green",
    "passengerAge":25,
    "sourceStation":"London",
    "destinationStation":"Birmingham",
    "seatType":"Slepper",
    "emailAddress":"[email protected]"
},
{ 
    "passengerId":148,
    "passengerName":"Kevin Joseph",
    "passengerAge":28,
    "sourceStation":"Manchester",
    "destinationStation":"London",
    "seatType":"Slepper",
    "emailAddress":"[email protected]"
},
{ 
    "passengerId":154,
    "passengerName":"Sheldon burns",
    "passengerAge":26,
    "sourceStation":"Cambridge",
    "destinationStation":"Leeds",
    "seatType":"Slepper",
    "emailAddress":"[email protected]"
},
{ 
    "passengerId":168,
    "passengerName":"Jack Ferguson",
    "passengerAge":24,
    "sourceStation":"Cardiff",
    "destinationStation":"Coventry",
    "seatType":"Slepper",
    "emailAddress":"[email protected]"
}
]);

insertMany di atas kueri akan mengembalikan JSON berikut:

{
    "acknowledged" : true,
    "insertedIds" : [
        ObjectId("623d7f079d55d4e137e47825"),
	ObjectId("623d7f079d55d4e137e47826"),
	ObjectId("623d7f079d55d4e137e47827"),
        ObjectId("623d7f079d55d4e137e47828")
    ]
}

Sampai sekarang, kami telah memasukkan data dummy ke dalam koleksi perjalanan .

3. Menggunakan temukan Metode

menemukan metode menemukan dan mengembalikan dokumen yang cocok dengan kriteria kueri yang ditentukan pada koleksi. Jika beberapa dokumen sesuai dengan kondisi, maka semua dokumen akan dikembalikan berdasarkan urutan dokumen pada disk. Selain itu, di MongoDB, temukan metode mendukung proyeksi parameter dalam kueri. Jika kita menentukan parameter proyeksi di find metode, itu akan mengembalikan semua dokumen yang hanya berisi bidang proyeksi.

Satu hal penting yang perlu diperhatikan adalah bahwa _id bidang selalu disertakan dalam respons kecuali dihapus secara eksplisit.

Untuk mendemonstrasikannya, mari kita lihat kueri shell untuk memproyeksikan bidang kunci:

db.travel.find({},{"passengerId":1}).pretty();

Tanggapan untuk pertanyaan di atas adalah:

{ "_id" : ObjectId("623d7f079d55d4e137e47825"), "passengerId" : 145 }
{ "_id" : ObjectId("623d7f079d55d4e137e47826"), "passengerId" : 148 }
{ "_id" : ObjectId("623d7f079d55d4e137e47827"), "passengerId" : 154 }
{ "_id" : ObjectId("623d7f079d55d4e137e47828"), "passengerId" : 168 }

Di sini, dalam kueri ini, kami hanya memproyeksikan passengerId. Sekarang, mari lihat kolom utama dengan mengecualikan _id :

db.travel.find({},{"passengerId":1,"_id":0}).pretty();

Kueri di atas akan memiliki respons berikut:

{ "passengerId" : 145 }
{ "passengerId" : 148 }
{ "passengerId" : 154 }
{ "passengerId" : 168 }

Di sini, dalam kueri ini, kami mengecualikan _id lapangan dari proyeksi respon. Mari kita lihat kode driver Java untuk query di atas:

MongoClient mongoClient = new MongoClient("localhost", 27017);
DB database = mongoClient.getDB("baeldung");
DBCollection collection = database.getCollection("travel");
BasicDBObject queryFilter = new BasicDBObject();
BasicDBObject projection = new BasicDBObject();
projection.put("passengerId", 1);
projection.put("_id", 0);
DBCursor dbCursor = collection.find(queryFilter, projection);
while (dbCursor.hasNext()) {
    System.out.println(dbCursor.next());
}

Pada kode di atas, pertama-tama kita membuat MongoClient koneksi dengan server mongo lokal yang berjalan pada port 27017 . Selanjutnya, kami menggunakan temukan metode, yang memiliki dua parameter, queryFilter, dan proyeksi. Kueri DBObject berisi filter yang kita butuhkan untuk mengambil data. Di sini kami mencetak semua bidang proyeksi dokumen perjalanan menggunakan DBCursor .

4. Menggunakan agregasi Metode

agregasi operasi di MongoDB memproses catatan data dan dokumen dan mengembalikan hasil yang dihitung. Ini mengumpulkan nilai dari berbagai dokumen dan mengelompokkannya bersama-sama sebelum melakukan berbagai jenis operasi pada data yang dikelompokkan, seperti jumlah, rata-rata, minimum, maksimum, dll.

Kita dapat menggunakan pipa agregasi MongoDB ketika kita perlu melakukan agregasi yang lebih kompleks. Jalur agregasi adalah kumpulan tahapan yang digabungkan dengan sintaks kueri MongoDB untuk menghasilkan hasil gabungan.

Mari kita lihat kueri agregasi untuk mengambil nilai dengan nama kunci:

db.travel.aggregate([
{
    "$project":{
        "passengerId":1
    }
}
]).pretty();

Respons terhadap kueri agregasi di atas adalah:

{ "_id" : ObjectId("623d7f079d55d4e137e47825"), "passengerId" : 145 }
{ "_id" : ObjectId("623d7f079d55d4e137e47826"), "passengerId" : 148 }
{ "_id" : ObjectId("623d7f079d55d4e137e47827"), "passengerId" : 154 }
{ "_id" : ObjectId("623d7f079d55d4e137e47828"), "passengerId" : 168 }

Dalam hal ini, kami menggunakan $project tahap pipa agregasi. $proyek menentukan bidang apa yang akan disertakan atau dikecualikan. Dalam kueri kami, kami hanya meneruskan penumpangId ke tahap proyeksi.

Mari kita lihat kode driver Java untuk query di atas:

ArrayList<Document> response = new ArrayList<>();
ArrayList<Document> pipeline = new ArrayList<>(Arrays.asList(new Document("$project", new Document("passengerId", 1L))));
database = mongoClient.getDatabase("baeldung");
database.getCollection("travel").aggregate(pipeline).allowDiskUse(true).into(response);
System.out.println("response:- " + response);

Kita juga dapat menulis pipa agregasi dengan cara berikut:

ArrayList<Document> response = new ArrayList<>();
ArrayList<Bson> pipeline = new ArrayList<>(Arrays.asList(
  project(fields(Projections.exclude("_id"), Projections.include("passengerId")))));
MongoDatabase database = mongoClient.getDatabase("baeldung");
database.getCollection("travel").aggregate(pipeline).allowDiskUse(true).into(response);
System.out.println("response:- "+response);

Kami membuat pipa agregasi dengan kode driver java dan menetapkan tahap proyek hanya untuk menyertakan passengerId bidang. Akhirnya, kami melewati pipa agregasi ke agregat metode untuk mengambil data.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana saya bisa menggunakan cursor.forEach() di MongoDB menggunakan Node.js?

  2. Gabungkan dua bidang array di mongoDB

  3. Permintaan untuk bidang dalam objek dalam array dengan Mongo?

  4. Penggunaan opsiFindAndModify tidak didukung

  5. MongoDB dan CodeIgniter