使用MongoDB聚合框架自定义管道操作符

6

实际上,我使用MapReduce进行一些计算。

由于聚合框架中没有可用的管道运算符来执行我的计算,因此我无法使用它来完成这项工作。

是否可以编写自定义管道运算符?

提前感谢。


你需要什么样的额外运算符? - Stennie
标准差、中位数、条件操作为主。 - hotips
1个回答

9
答案取决于你对“可能”的定义:
1)开箱即用:不行。
截至MongoDB 2.2,没有终端用户功能允许您添加新的管道操作符。聚合框架和管道操作符是使用C++实现的,以改进性能和并发性,而早期的聚合选项(如MapReduce)则是使用JavaScript实现的。
2)如果你想用C++编写一个:可以(但不容易)。
MongoDB是一个开源项目,因此您可以选择深入了解C++代码并自己实现其他功能(请参阅:src/mongo/db/pipeline)。请注意,有关为MongoDB项目做出贡献的指南,并且持续的开发非常活跃。
如果您想编写自定义函数,目前最好的选择是继续使用MapReduce
无论以上选项如何,如果您想要看到管道操作符或功能,请在MongoDB Jira SERVER project(组件:聚合框架)中建议。这将允许其他人对功能请求进行评论、关注和投票。如果您最终决定自己实现该功能,则可以在拉取请求中引用Jira功能描述。在提交新的功能请求之前,您还应搜索是否已经提出了类似的请求
例如,已经有以下请求:

你知道官方版本是否计划使用自定义管道聚合器吗?谢谢! - hotips
聚合框架旨在在C++中具有可扩展性(和高性能)...因此,用户定义的管道运算符似乎不太匹配。如果您在Jira上投票功能请求,则这些请求将纳入未来版本的计划中。Map / Reduce提供了完整的JavaScript解释器,可用于数据聚合/操作,但效率和性能存在一定的折衷。有关MongoDB聚合选项的比较,请参见:[group(),$ group和MapReduce](https://dev59.com/KWct5IYBdhLWcg3wHZ5q)。 - Stennie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接