MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

tìm kiếm và sắp xếp toàn văn php mongodb

Bạn đang cố gắng sắp xếp trên một trường meta, không phải một tên trường thông thường.

Đối số thứ hai cho $collection->find() xác định trường nào của tài liệu mà bạn (không / không) muốn được truy vấn trả về.

Điều này tương tự với SELECT *... so với SELECT field1, field2 ... trong cơ sở dữ liệu SQL.

Bây giờ, trong MongoDB 2.6 có một từ khóa bổ sung mà bạn có thể sử dụng ở đây, $ meta. Từ khóa này cho phép bạn "đưa" tên trường vào tài liệu trả về (nếu không thì sẽ không thực sự tồn tại). Giá trị của tên trường được chèn này sẽ đến từ một số loại "siêu dữ liệu" của tài liệu hoặc truy vấn bạn đang thực thi.

Toán tử truy vấn $ text là một ví dụ về toán tử có thêm thông tin về tài liệu phù hợp .. Thật không may, nó không có cách nào để cho bạn biết về thông tin bổ sung này vì làm như vậy sẽ thao túng tài liệu của bạn theo cách không mong muốn. Tuy nhiên, nó đính kèm siêu dữ liệu vào tài liệu - và bạn có quyền quyết định xem mình có cần nó hay không.

Dữ liệu meta mà toán tử $ text tạo ra sử dụng từ khóa "textScore". Nếu bạn muốn bao gồm dữ liệu đó, bạn có thể làm như vậy bằng cách gán nó cho tên trường bạn chọn:

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

Ví dụ:trong trường hợp tìm kiếm $ text (textScore), chúng ta có thể đưa tên trường "score" vào tài liệu của mình bằng cách chuyển mảng này làm đối số thứ 2 cho $collection->find() :

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

Bây giờ chúng tôi đã chèn một trường có tên "điểm" vào tài liệu trả về của chúng tôi có giá trị "textScore" từ tìm kiếm $ text.

Nhưng vì đây vẫn chỉ là dữ liệu meta của tài liệu, nếu bạn muốn tiếp tục sử dụng giá trị này trong bất kỳ thao tác tiếp theo nào trước khi thực hiện truy vấn, bạn vẫn phải gọi nó là $ meta data.

Điều này có nghĩa là, để sắp xếp trên trường, bạn phải sắp xếp trên phép chiếu $ meta

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

Ví dụ đầy đủ của bạn sau đó trở thành:

<?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. Xóa bản sao trong MongoDB

  2. không thể kết nối với máy chủ 127.0.0.1 shell / mongo.js

  3. Trong MongoDB làm thế nào để trả về chỉ một phần của mảng?

  4. Khi nào sử dụng GridFS trên MongoDB?

  5. Lập trình cơ sở dữ liệu Python với MongoDB cho người mới bắt đầu