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

php mongodb pencarian dan pengurutan teks lengkap

Anda mencoba mengurutkan pada bidang meta, bukan nama bidang biasa.

Argumen kedua untuk $collection->find() menentukan bidang dokumen mana yang Anda (lakukan/tidak) ingin dikembalikan oleh kueri.

Ini mirip dengan SELECT *... vs SELECT field1, field2 ... dalam database SQL.

Nah, di MongoDB 2.6 ada kata kunci tambahan yang bisa kamu gunakan di sini, $meta. Kata kunci ini memungkinkan Anda untuk "menyuntikkan" nama bidang ke dalam dokumen pengembalian (yang sebenarnya tidak akan ada). Nilai nama bidang yang disuntikkan ini akan berasal dari semacam "data meta" dari dokumen atau kueri yang Anda jalankan.

Operator kueri $text adalah contoh operator yang memiliki lebih banyak informasi yang tersedia tentang dokumen yang cocok. Sayangnya, ia tidak memiliki cara untuk memberi tahu Anda tentang informasi tambahan ini karena melakukannya akan memanipulasi dokumen Anda dengan cara yang tidak terduga. Namun itu melampirkan metadata ke dokumen - dan terserah Anda untuk memutuskan apakah Anda membutuhkannya atau tidak.

Data meta yang dibuat oleh operator $text menggunakan kata kunci "textScore". Jika Anda ingin menyertakan data tersebut, Anda dapat melakukannya dengan menetapkannya ke nama bidang pilihan Anda:

array("myFieldname" => array('$meta' => 'keyword'))

Misalnya, dalam kasus pencarian $text (textScore) kita dapat menginjeksi fieldname "score" ke dalam dokumen kita dengan meneruskan array ini sebagai argumen ke-2 ke $collection->find() :

array("score" => array('$meta' => 'textScore'))

Sekarang kami telah menyuntikkan bidang yang disebut "score" ke dalam dokumen pengembalian kami yang memiliki nilai "textScore" dari pencarian $text.

Tetapi karena ini masih hanya meta data dokumen, jika Anda ingin terus menggunakan nilai ini dalam operasi berikutnya sebelum mengeksekusi kueri, Anda masih harus merujuknya sebagai $meta data.

Artinya, untuk mengurutkan pada bidang Anda harus mengurutkan pada proyeksi $meta

array('score' => array('$meta' => 'textScore'))

Contoh lengkap Anda kemudian menjadi:

<?php
$mc = new MongoClient();


$collection = $mc->selectCollection("myDatabase", "myCollection");

$string = "search string";
$cursor = $collection->find(
    array('$text' => array('$search' => $string)),
    array('score' => array('$meta' => 'textScore'))
);

$cursor = $cursor->sort(
    array('score' => array('$meta' => 'textScore'))
);

foreach($cursor as $document) {
    var_dump($document);
}



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Permintaan untuk bidang dalam objek dalam array dengan Mongo?

  2. MongoDB $minggu

  3. MongoDB $arrayToObject

  4. Bisakah saya meminta MongoDB ObjectId berdasarkan tanggal?

  5. Bagaimana cara membuat skema luwak secara dinamis?