我需要使用全文索引进行搜索,此代码可以正常工作:
$cursor=$collection->find(array('$text'=>(array('$search'=>$s))),array("score"=> array('$Meta'=>"textscore"))
        );

我尝试用以下方法对游标进行排序:

$cursor =$cursor->sort(array("score"=>1));

当我试着读

var_dump($cursor->getNext());

我给了我这个错误
带有消息’localhost:27017的未捕获异常’MongoCursorException’:无法规范化查询:BadValue不能对$Meta投影进行非$Meta排序’

任何想法?

您正在尝试对元字段进行排序,而不是正常的字段名称.

$collection->find()的第二个参数确定查询返回的文件的哪些字段(是/否).

这类似于sql数据库中的SELECT * … vs SELECT field1,field2 ….

现在,在MongoDB 2.6中,你可以使用一个额外的关键字,$meta.这个关键字允许你将字段名“注入”到返回文档中(否则实际上不存在).此注入的fieldname的值将来自您正在执行的文档或查询的某种“元数据”.

$text查询运算符是一个运算符的示例,其中包含有关匹配文档的更多可用信息.不幸的是,它无法告诉您有关此额外信息的信息,因为这样做会以意外方式操作您的文档.但它会将元数据附加到文档中 – 由您来决定是否需要它.

$text运算符创建的元数据使用关键字“textscore”.如果要包含该数据,可以通过将其分配给您选择的字段名称来实现:

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

例如,在$text search(textscore)的情况下,我们可以通过将此数组作为第二个参数传递给$collection->find(),将字段名称“score”注入到我们的文档中:

array("score" => array('$Meta' => 'textscore'))

现在我们在返回文档中注入了一个名为“score”的字段,该文档具有来自$text搜索的“textscore”值.

但由于这仍然只是文档的元数据,如果您想在执行查询之前继续在任何后续操作中使用此值,您仍然必须将其称为$Meta数据.

这意味着,要对您必须在$meta projection上排序的字段进行排序

array('score' => array('$Meta' => 'textscore'))

您的完整示例将变为:

<?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);
}

php mongodb全文搜索和排序的更多相关文章

  1. ios – Swift:自定义相机使用图像保存修改后的元数据

    我试图保存图像样本缓冲区中的一些元数据以及图像.我需要:>将图像旋转到元数据的方向>从元数据中删除方向>将日期保存到元数据中>将包含元数据的图像保存到文档目录我试过从数据创建一个UIImage,但是删除了元数据.我已经尝试使用数据中的CIImage来保存元数据,但是我无法将其旋转然后将其保存到文件中.这是我保存图像的代码.解决方法我最终弄清楚如何让一切按照我需要的方式工作.对我帮助最大的事情是发现

  2. ios – 如何为多个目标提供传送(fastlane)下载元数据?

    附:这是一个很大的遗留项目,所以将它分成六个不同的项目会很棒,但不幸的是,这不是一个选择.解决方法我一直在努力解决这个问题,使用.env文件设置提交很容易.但是检索初始数据很困难,但并非不可能.要获取元数据,它运行此命令:并为截图:

  3. ios – 从MPMoviePlayerController获取MetaData

    代码!

  4. ios – 从音频流中获取元数据

    我想获取文件名,如果可能的话,可以从我在AVQueuePlayer上播放的AVPlayerItem中的流式URL中的相册图像,但是我不知道该怎么做.另外如果事实证明,我的流网址没有任何元数据,我可以将元数据放入我的NSURL*,然后传递给AVPlayerItem?

  5. 在iOS上保存修改后的元数据(无需重新编码)的原始图像数据

    我想在temp文件夹中保存一些元数据更改的图像,而无需重新编码实际的图像数据.我发现能够做到这一点的唯一方法是ALAssetsLibrary/writeImageDataToSavedPhotosAlbum:metadata:completionBlock:,但是,这个方法将图像保存到照片库中.相反,我想将图像保存到临时文件夹(例如,通过电子邮件分享,而不填充照片库).我试过使用CGImageDe

  6. iOS应用程序审核队列,如果您更改元数据,是否重置?

    我知道更新并重新提交您的应用程序二进制文件让您回到iOS应用程序市场审核队列,并将时钟重新设置为6–8天的等待时间...但有人知道如果更改元数据也会使您处于队列的后面?我的第一个二进制文件在5天内被批准和发布(是),但是我提交的更新已经在那里等待10天了...也许是因为我已经添加了一些描述翻译,并更改了截图?

  7. OpenStack 对象存储 Swift 简单介绍

    Swift最适合的就是永久类型的静态数据的长期存储。提供账号验证的节点被称为AccountServer。Swift中由Swauth提供账号权限认证服务。ProxyserveracceptsincomingrequestsviatheOpenStackObjectAPIorjustrawHTTP.Itacceptsfilestoupload,modificationstoMetadataorcontainercreation.Inaddition,itwillalsoservefilesorcontaine

  8. swift对象存储

    Swift最初是由Rackspace公司开发的高可用分布式对象存储服务,并于2010年贡献给OpenStack开源社区作为其最初的核心子项目之一,为其Nova子项目提供虚机镜像存储服务。Swift为账户,容器和对象分别定义了的环,查找账户和容器的是同样的过程。

  9. 让你真正明白cinder与swift、glance的区别

    Cinder——提供块存储,类似于Amazon的EBS块存储服务,目前仅给虚机挂载使用。Cinder包含以下三个主要组成部分APIservice:Cinder-api是主要服务接口,负责接受和处理外界的API请求,并将请求放入RabbitMQ队列,交由后端执行。Cinder目前提供VolumeAPIV2Schedulerservice:处理任务队列的任务,并根据预定策略选择合适的VolumeService节点来执行任务。目前版本的cinder仅仅提供了一个SimpleScheduler,该调度器选择卷数量

  10. Swift 如何访问 MongoDB

    Perfect开源项目参与Perfect开发Slack在线协同MongoDBMongoDB库函数是在mongo-c语言库的基础上封装而成,能够为Swift轻松访问MongoDB服务器提供便利。请确保安装并激活了最新版本的Swift3.0toolchain。注意每次向项目追加依存关系时,必须要打开Swift软件包管理器重新创建一个新的Xcode项目文件。在您的项目中声明MongoDB请在您的Perfect项目源程序开头声明并导入MongoDB函数库:创建一个MongoDB数据库连接创建到MongoDB服务器

随机推荐

  1. PHP个人网站架设连环讲(一)

    先下一个OmnihttpdProffesinalV2.06,装上就有PHP4beta3可以用了。PHP4给我们带来一个简单的方法,就是使用SESSION(会话)级变量。但是如果不是PHP4又该怎么办?我们可以假设某人在15分钟以内对你的网页的请求都不属于一个新的人次,这样你可以做个计数的过程存在INC里,在每一个页面引用,访客第一次进入时将访问时间送到cookie里。以后每个页面被访问时都检查cookie上次访问时间值。

  2. PHP函数学习之PHP函数点评

    PHP函数使用说明,应用举例,精简点评,希望对您学习php有所帮助

  3. ecshop2.7.3 在php5.4下的各种错误问题处理

    将方法内的函数,分拆为2个部分。这个和gd库没有一点关系,是ecshop程序的问题。会出现这种问题,不外乎就是当前会员的session或者程序对cookie的处理存在漏洞。进过本地测试,includes\modules\integrates\ecshop.php这个整合自身会员的类中没有重写integrate.php中的check_cookie()方法导致,验证cookie时返回的username为空,丢失了登录状态,在ecshop.php中重写了此方法就可以了。把他加到ecshop.php的最后面去就可

  4. NT IIS下用ODBC连接数据库

    $connection=intodbc_connect建立数据库连接,$query_string="查询记录的条件"如:$query_string="select*fromtable"用$cur=intodbc_exec检索数据库,将记录集放入$cur变量中。再用while{$var1=odbc_result;$var2=odbc_result;...}读取odbc_exec()返回的数据集$cur。最后是odbc_close关闭数据库的连接。odbc_result()函数是取当前记录的指定字段值。

  5. PHP使用JpGraph绘制折线图操作示例【附源码下载】

    这篇文章主要介绍了PHP使用JpGraph绘制折线图操作,结合实例形式分析了php使用JpGraph的相关操作技巧与注意事项,并附带源码供读者下载参考,需要的朋友可以参考下

  6. zen_cart实现支付前生成订单的方法

    这篇文章主要介绍了zen_cart实现支付前生成订单的方法,结合实例形式详细分析了zen_cart支付前生成订单的具体步骤与相关实现技巧,需要的朋友可以参考下

  7. Thinkphp5框架实现获取数据库数据到视图的方法

    这篇文章主要介绍了Thinkphp5框架实现获取数据库数据到视图的方法,涉及thinkPHP5数据库配置、读取、模型操作及视图调用相关操作技巧,需要的朋友可以参考下

  8. PHP+jquery+CSS制作头像登录窗(仿QQ登陆)

    本篇文章介绍了PHP结合jQ和CSS制作头像登录窗(仿QQ登陆),实现了类似QQ的登陆界面,很有参考价值,有需要的朋友可以了解一下。

  9. 基于win2003虚拟机中apache服务器的访问

    下面小编就为大家带来一篇基于win2003虚拟机中apache服务器的访问。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  10. Yii2中组件的注册与创建方法

    这篇文章主要介绍了Yii2之组件的注册与创建的实现方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下

返回
顶部