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

Performa pencarian MongoDb

Terima kasih telah memposting penjelasannya. Mari kita atasi masalah satu per satu.

Pertama, saya tidak berpikir kueri ini melakukan apa yang Anda pikirkan/inginkan. Mari saya tunjukkan dengan contoh menggunakan shell mongo. Permintaan Anda, diterjemahkan ke dalam shell, adalah

{ "$or" : [
    { "$and" : [
        { "SearchTerms.Key" : "ClientId" }, 
        { "SearchTerms.Value" : "xxx" }
    ]},
    { "$and" : [
        { "SearchTerms.Key" : "CustomerName" },     
        { "SearchTerms.Value" : "Jan" }
    ]}
]}

Kueri ini menemukan dokumen di mana beberapa Key memiliki nilai "ClientId" dan beberapa Value memiliki nilai "xxx" atau beberapa Key memiliki nilai "NamaPelanggan" dan beberapa Value nilai "Jan". Kunci dan nilainya tidak perlu menjadi bagian dari elemen array yang sama . Misalnya, dokumen berikut cocok dengan kueri Anda

{ "SearchTerms" : [
        { "Key" : "ClientId", "Value" : 691 }, 
        { "Key" : "banana", "Value" : "xxx" }
    ]
}

Saya menduga perilaku yang Anda inginkan adalah mencocokkan persis dengan dokumen yang berisi Key dan Value dalam elemen array yang sama. $elemMatch operator adalah alat untuk pekerjaan itu:

{ "$or" : [
    { "SearchTerms" : { "$elemMatch" : { "Key" : "ClientId", "Value" : "xxx" } } },
    { "SearchTerms" : { "$elemMatch" : { "Key" : "CustomerName", "Value" : "Jan" } } }
]}

Kedua, saya tidak berpikir skema ini yang Anda cari. Anda tidak menjelaskan kasus penggunaan Anda jadi saya tidak yakin, tetapi situasi yang dijelaskan dalam posting blog itu adalah situasi yang sangat jarang di mana Anda perlu menyimpan dan mencari sewenang-wenang pasangan nilai kunci yang dapat berubah dari satu dokumen ke dokumen berikutnya. Ini seperti membiarkan pengguna memasukkan metadata khusus. Hampir tidak ada aplikasi yang ingin atau perlu melakukan ini. Sepertinya aplikasi Anda menyimpan informasi tentang pelanggan, mungkin untuk sistem internal. Anda harus dapat menentukan model data untuk pelanggan Anda yang terlihat seperti

{
    "CustomerId" : 1234,
    "CustomerName" : "Jan",
    "ClientId" : "xpj1234",
    ...
}

Ini akan menyederhanakan dan meningkatkan hal-hal secara dramatis. Saya pikir kabel disilangkan di sini karena kadang-kadang orang menyebut MongoDB "tanpa skema" dan posting blog berbicara tentang dokumen "tanpa skema". Posting blog benar-benar berbicara tentang dokumen tanpa skema di mana Anda tidak tahu apa yang akan masuk ke sana. Sebagian besar aplikasi seharusnya tahu persis seperti apa struktur umum dokumen dalam koleksi nantinya.

Akhirnya, saya pikir atas dasar ini kita dapat mengabaikan masalah dengan kueri lambat untuk saat ini. Jangan ragu untuk mengajukan pertanyaan lain atau edit pertanyaan ini dengan penjelasan tambahan jika Anda memerlukan bantuan lebih lanjut atau jika masalahnya tidak hilang setelah Anda mempertimbangkan apa yang saya katakan di sini.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cara bergabung dan mengurutkan beberapa koleksi dalam satu saluran di Mongo

  2. cara menjalankan kueri hanya baca pada replika sharded yang diatur di mongodb

  3. Apakah mungkin mengganti nama bidang dalam output kueri Mongo di PyMongo?

  4. MongoDB:cara menemukan dokumen yang mengabaikan case sensitif, aksen, dan persen seperti logika (%)

  5. permintaan meteor untuk semua dokumen dengan bidang unik