如何使用 PHP 驱动程序在 MongoDB 中创建存储函数
Posted
技术标签:
【中文标题】如何使用 PHP 驱动程序在 MongoDB 中创建存储函数【英文标题】:How to create a stored function in MongoDB using the PHP driver 【发布时间】:2012-03-24 10:31:45 【问题描述】:我正在尝试做出设计决定。
我不太熟悉 MongoDB 或其 php 驱动程序,但我对 mongodb 使用的存储函数的 javascript 语法很感兴趣。
您能告诉我是否可以使用 PHP 创建 MongoDB 存储函数吗?
我创建mongodb存储函数的参考:https://github.com/mongodb/mongo/blob/master/jstests/storefunc.js
【问题讨论】:
【参考方案1】:听起来你在引用server-side functions。
创建/更新服务器端函数就像更新system.js
集合一样简单:
db.system.js.save( _id : "foo" , value : function( x , y ) return x + y; );
这里的问题实际上是“使用”服务器端功能。首先,您必须编写一些笨拙的更新/插入语句。其次,这些不是存储过程。编译它们的目的不是为了在服务器上运行它们以提高速度。
如果您使用服务器端函数进行查询,它将不会对该函数内部的任何内容使用索引。另外,它会在后台使用eval
功能,该功能可以锁定您的数据库。
此外,没有触发器,因此您也不能将它们用于触发器。
总体而言,服务器端函数没有太多用处,这可能是它们在文档中获得 3 段的原因。
如果您需要高级查询功能,请查看新的聚合框架。如果您正在寻找某种形式的触发器,则必须自己动手。如果您正在寻找存储过程,这些都不是。
【讨论】:
嗯。如果它如此混乱,为什么它实际上存在?有没有什么场景只能用服务端功能解决问题? 我认为这是他们认为可能是下一个存储过程时创建的东西之一。但是,他们一次只能拥有一个 javascript 解释器实例这一事实真的让梦想破灭了。值得记住的是,MongoDB 只有几年的历史,而且他们没有足够的人来真正更新文档。 还有一件事:我在 mapReduce 上读到过,您描述的所有后备方案是否也适用于 mapReduce? 一个 MongoDB 实例一次只能运行一个 Map/Reduce。 (同样只有一个 javascript 引擎)这是从 2.1 开始的聚合框架的主要驱动力之一。 谢谢。我找到了另一种使用 mapReduce 的方法来完成我的目标:dba.stackexchange.com/q/15517/7652 通过在文档中存储一个闭包:)以上是关于如何使用 PHP 驱动程序在 MongoDB 中创建存储函数的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Nodejs 在 MongoDB 中创建类似 %keyword% 的查询
如何在 OS X 上使用 PHP7 在 MAMP 上安装 mongodb php 驱动程序?
如何将 maxPoolSize 与 mongodb-php 驱动程序版本 1.2.0 一起使用