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

MongoDB:Bagaimana cara mengetahui apakah bidang array berisi elemen?

[edit berdasarkan ini sekarang dimungkinkan dalam versi terbaru]

[Jawaban yang Diperbarui] Anda dapat menanyakan cara berikut untuk mendapatkan kembali nama kelas dan ID siswa hanya jika mereka sudah terdaftar.

db.student.find({},
 {_id:0, name:1, students:{$elemMatch:{$eq:ObjectId("51780f796ec4051a536015cf")}}})

dan Anda akan mendapatkan kembali apa yang Anda harapkan:

{ "name" : "CS 101", "students" : [ ObjectId("51780f796ec4051a536015cf") ] }
{ "name" : "Literature" }
{ "name" : "Physics", "students" : [ ObjectId("51780f796ec4051a536015cf") ] }

[Jawaban Asli] Tidak mungkin melakukan apa yang ingin Anda lakukan saat ini. Ini sangat disayangkan karena Anda akan dapat melakukan ini jika siswa disimpan dalam array sebagai objek. Sebenarnya, saya sedikit terkejut Anda hanya menggunakan ObjectId() karena itu akan selalu mengharuskan Anda untuk mencari siswa jika Anda ingin menampilkan daftar siswa yang terdaftar dalam kursus tertentu (lihat daftar Id terlebih dahulu kemudian cari nama di koleksi siswa - dua kueri, bukan satu!)

Jika Anda menyimpan (sebagai contoh) Id dan nama dalam larik kursus seperti ini:

{
        "_id" : ObjectId("51780fb5c9c41825e3e21fc6"),
        "name" : "Physics",
        "students" : [
                {id: ObjectId("51780f796ec4051a536015cf"), name: "John"},
                {id: ObjectId("51780f796ec4051a536015d0"), name: "Sam"}
        ]
}

Permintaan Anda selanjutnya adalah:

db.course.find( { }, 
                { students : 
                    { $elemMatch : 
                       { id : ObjectId("51780f796ec4051a536015d0"), 
                         name : "Sam" 
                       } 
                    } 
                } 
);

Jika siswa itu hanya terdaftar di CS 101, Anda akan mendapatkan kembali:

{ "name" : "Literature" }
{ "name" : "Physics" }
{
    "name" : "CS 101",
    "students" : [
        {
            "id" : ObjectId("51780f796ec4051a536015cf"),
            "name" : "John"
        }
    ]
}


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. mongoengine - Kueri pada ListField dari EmbeddedDocumentField

  2. Menginstal dan Menjalankan MongoDB di OSX

  3. Cadangan MongoDB sebagai teks daripada biner untuk kontrol sumber

  4. Koneksi SSL yang ditandatangani sendiri menggunakan PyMongo

  5. MongoDb:Manfaat menggunakan ObjectID vs string yang berisi Id?