Saya punya masalah ketika menanyakan mongoDB dengan notasi objek bersarang:
db.messages.find( { headers : { From: "[email protected]" } } ).count()
0
db.messages.find( { 'headers.From': "[email protected]" } ).count()
5
Saya tidak bisa melihat kesalahan saya. Saya mengharapkan notasi objek bersarang untuk mengembalikan hasil yang sama dengan permintaan notasi titik. Dimana saya salah
conditions['some.path'] = 'value'
dalam logika bisnis saya, kemudian menjalankan satu permintaan di akhir:find(conditions, fields, callback);
domains.domain.com
. Apakah ada solusi untuk skenario ini (tanpa mengubah domain.com menjadi sesuatu yang lain misalnya domain_com)?Dua mekanisme kueri bekerja dengan cara yang berbeda, seperti yang disarankan dalam dokumen di bagian Sub-dokumen :
Ketika bidang memegang dokumen yang disematkan (yaitu, sub dokumen ), Anda dapat menentukan seluruh sub dokumen sebagai nilai bidang, atau “menjangkau” sub dokumen dengan menggunakan notasi titik, untuk menentukan nilai untuk bidang individual dalam sub dokumen :
Kesamaan kecocokan dalam subdokumen memilih dokumen jika sub dokumen cocok persis dengan sub dokumen yang ditentukan, termasuk urutan bidang.
Dalam contoh berikut, kueri cocok dengan semua dokumen di mana nilai produsen bidang adalah subdokumen yang hanya berisi bidang
company
dengan nilai'ABC123'
dan bidangaddress
dengan nilai'123 Street'
, dalam urutan yang tepat:sumber
Karena ada banyak kebingungan tentang permintaan koleksi MongoDB dengan sub-dokumen , saya pikir layak untuk menjelaskan jawaban di atas dengan contoh:
Pertama, saya telah memasukkan hanya dua objek dalam koleksi yaitu:
message
sebagai:Seharusnya satu karena pertanyaan ini untuk dokumen di mana
headers
sama dengan objek{From: "[email protected]"}
, hanya yaitu tidak mengandung bidang lain atau kita harus menentukan seluruh sub-dokumen sebagai nilai bidang.Demikian sesuai jawaban dari @ Edmondo1984
Dari pernyataan di atas, seperti apa hasil query di bawah ini?
Dan bagaimana jika kita akan mengubah urutan
From
danTo
yaitu sama dengan sub-dokumen dari dokumen kedua?Untuk menggunakan operator titik, saya pikir itu sangat jelas untuk setiap orang. Mari kita lihat hasil dari kueri di bawah ini:
Saya harap penjelasan ini dengan contoh di atas akan membuat seseorang lebih jernih menemukan permintaan dengan sub-dokumen .
sumber