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

mencocokkan bidang secara internal di mongodb

Jika memungkinkan, saya sarankan Anda mengatur kondisi saat menyimpan data sehingga Anda dapat melakukan pemeriksaan kebenaran dengan cepat (isInStudentsList ). Akan sangat cepat untuk melakukan jenis kueri seperti itu.

Jika tidak, ada cara yang relatif rumit dalam menggunakan alur kerangka kerja Agregasi untuk melakukan apa yang Anda inginkan dalam satu kueri:

db.students.aggregate( 
    {$project: 
        {studentId: 1, studentIdComp: "$students.id"}},  
    {$unwind: "$studentIdComp"}, 
    {$project : { studentId : 1, 
        isStudentEqual: { $eq : [ "$studentId", "$studentIdComp" ] }}}, 
    {$match: {isStudentEqual: true}})

Diberikan contoh input Anda, outputnya adalah:

{
    "result" : [
         {
             "_id" : ObjectId("517b88decd483543a8bdd95b"),
             "studentId" : 23,
             "isStudentEqual" : true
         }
    ],
    "ok" : 1
}

Penjelasan singkat langkah-langkahnya:

  1. Buat proyeksi dokumen hanya dengan studentId dan bidang baru dengan larik yang hanya berisi id (jadi dokumen pertama akan berisi [23, 55] .
  2. Dengan menggunakan struktur tersebut, $unwind . Itu membuat dokumen sementara baru untuk setiap elemen array di studentIdComp susunan.
  3. Sekarang, ambil dokumen-dokumen itu, dan buat proyeksi dokumen baru, yang terus memiliki studentId dan menambahkan bidang baru bernama isStudentEqual yang membandingkan kesetaraan dua bidang, studentId dan studentIdComp . Ingatlah bahwa saat ini ada satu dokumen sementara yang berisi dua bidang tersebut.
  4. Terakhir, periksa apakah nilai perbandingan isStudentEqual benar dan kembalikan dokumen-dokumen itu (yang akan berisi dokumen asli _id dan studentId .
  5. Jika siswa ada dalam daftar beberapa kali, Anda mungkin perlu mengelompokkan hasilnya di studentId atau _id untuk mencegah duplikat (tetapi saya tidak tahu Anda membutuhkannya).


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Tidak dapat mencari data TXT untuk host Cluster0-XXXXX.mongodb.net

  2. Spring Data mongo - masalah dengan koleksi Distinct

  3. Urutkan geonear berdasarkan jarak dan waktu

  4. Jenis bersyarat Mongodb

  5. Apa perbedaan antara id dan _id di luwak?