如何使用 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 中创建存储函数的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Nestjs 中创建 mongodb 连接提供程序

如何使用 Nodejs 在 MongoDB 中创建类似 %keyword% 的查询

如何在 OS X 上使用 PHP7 在 MAMP 上安装 mongodb php 驱动程序?

如何将 maxPoolSize 与 mongodb-php 驱动程序版本 1.2.0 一起使用

如何在 OSX 上为 XAMPP 安装 PHP MongoDB 驱动程序?

PHP 的 foreach 如何与 MongoDB 游标配合使用?