【问题标题】:How to create a stored function in MongoDB using the PHP driver如何使用 PHP 驱动程序在 MongoDB 中创建存储函数
【发布时间】:2012-03-24 10:31:45
【问题描述】:

我正在尝试做出设计决定。

我不太熟悉 MongoDB 或其 PHP 驱动程序,但我对 mongodb 使用的存储函数的 JavaScript 语法很感兴趣。

您能告诉我是否可以使用 PHP 创建 MongoDB 存储函数吗?

我创建mongodb存储函数的参考:https://github.com/mongodb/mongo/blob/master/jstests/storefunc.js

【问题讨论】:

    标签: php mongodb stored-functions


    【解决方案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 通过在文档中存储一个闭包:)
    猜你喜欢
    • 2013-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-09
    相关资源
    最近更新 更多