1

假设我用 PHP 插入了以下文档(注意“ó”。)

$dbs->insert(array('name' => 'televisión'));

在mongodb数据库服务器中保存如下

{ "name" : "televisi��n" }

如果我按如下方式调用 findOne 方法,(注意 ó)

$doc = $dbs->findOne(array('name'   => "televisión"));

它返回给我正确的值

[name] => televisión

一切都很好,直到这里。

所以,想象一下,我需要从 php 中确定文件 televisión 是否在 mongodb 数据库中,但是我从一个没有重音“ó”的 URL 中获取值,即电视,所以。

$doc = $dbs->findOne(array('name'   => "television"));

findOne 方法返回 null,因此不匹配文档。

有什么方法可以不返回空值并且无论口音如何都可以找到文档?

提前致谢!

4

1 回答 1

1

在mongodb数据库服务器中保存如下

{“名称”:“电视”}

这可能是因为您的 shell 没有正确显示 UTF-8。

至于:

有什么方法可以不返回空值并且无论口音如何都可以找到文档?

您可以使用新的文本搜索功能来做到这一点:

<?php
$m = new MongoClient;
$d = $m->test;
$c = $d->so;

// Just dropping here to create a controlled output - no need to do this yourself.
$c->drop();

$c->ensureIndex(
    array( 'name' => 'text' ),
    array( 'default_language' => 'spanish' )
);

$c->insert( array('name' => 'televisión' ) );

$res = $d->command( array( 'text' => 'so', 'search' => 'television' ) );

var_dump( $res['results'] );
?>

哪个输出:

array(1) {
  [0] =>
  array(2) {
    'score' =>
    double(1)
    'obj' =>
    array(2) {
      '_id' =>
      class MongoId#6 (1) {
        ...
      }
      'name' =>
      string(11) "televisión"
    }
  }
}

要使文本搜索正常工作,您需要 MongoDB 2.4.x,并且您需要使用以下--setParameter textSearchEnabled=true标志专门启用它mongod或添加到您的代码中:

$d->command( array( 'setParameter' => 1, 'textSearchEnabled' => true ) );
于 2013-08-14T14:45:13.680 回答