使用 PHP 为 couchDB 创建视图

Posted

技术标签:

【中文标题】使用 PHP 为 couchDB 创建视图【英文标题】:Creating views with PHP for couchDB 【发布时间】:2010-03-09 17:49:35 【问题描述】:

我现在已经开始尝试 noSQL 数据库,目前正在测试 couchDB。似乎是一个很好的解决方案,但是当我按照可用示例了解如何创建视图(查询)以从数据库中选择文档并对其进行排序时,我真的有些头疼。

我能找到的一切都是关于 javascript 的,如果能参与一些 php 的例子,那就太好了,因为这是我们将使用的语言。

那么,如何?

【问题讨论】:

CouchDB 不是 XML 风格的数据库吗?为什么您的项目更喜欢这种类型的数据库?只是好奇。 嗨!除了 noSQL 数据库提供的一般优点和缺点之外,CouchDB 起初看起来很棒——使用比以往更少的代码轻松插入、更新和删除数据。但是,当我尝试查询内容而不是一次查询整个数据库时,我被卡住了(因为很少有 javascript 知识),并且仍然坚持试图找到一个好的解决方案。 CouchDB 使用 JSON 进行存储,而不是 XML。 【参考方案1】:

据我所知,用于关系数据库的 SQL 语言相当于 CouchDB 的 Javascript。

因此,如果您想创建一些“查询”或“视图”,则必须使用该语言:这是 CouchDb 可以理解的语言。

PHP 和 CouchDb 是完全独立的:唯一的是:

PHP 可以向 CouchDb 发送请求 并获得结果

但是在 CouchDb 端发生的事情与您的 PHP 脚本无关——CouchDb 端没有 PHP。

使用 PHP 过滤结果的唯一方法是:

从 CouchDb 请求的数据超出您的需要 从 PHP 中丢弃不需要的东西

但是,显然,这不是一个有效的解决方案......

【讨论】:

嗨,马丁!再次感谢您的精彩回答!您是否知道任何可以帮助以更像 mysql 的方式编写查询的 PHP 库?也许是个坏主意,但我认为缩短学习曲线会很棒。 不客气 :-) ;;;抱歉,我不知道有什么库可以做到这一点——而且我不确定这是否是解决问题的正确方法:Javascript 非常强大,并且要操作“面向对象”“数据库”,它可能是比 SQL 更好的工具,SQL 是为关系数据库制作的工具... ;;;你正在使用一个对你来说全新的工具(我猜即使是在它的基本概念上)——这很正常,有一些学习曲线;-)【参考方案2】:

Javascript 被授予作为 CouchDB 视图服务器的特权,只是因为它与 CouchDB 捆绑在一起。 There are view server implementations for many other languages/runtimes,包括 PHP。

JavaScript(CouchDB 原生) Common Lisp PHP Ruby(fork) 蟒蛇 couchdb-python couchdb-pythonviews 二郎 built-in view server erlview Clojure Perl Chicken Scheme Coldfusion Haskell OCaml

【讨论】:

【参考方案3】:

我认为您需要了解 Javascript 在 CouchDB 中的立场。 Javascript 不是 PHP、Ruby 等目标语言。Javascript 在这里更等同于 SQL。 javascript 是服务器端的,CouchDB 本身实际执行它。这就是你用来做 map/reduce 和构建视图等的东西。

【讨论】:

【参考方案4】:

试试 PHPillow 人

这里有一个非常简短的介绍:http://www.catswhocode.com/blog/getting-started-with-couchdb-tutorial-a-beginners-guide

如果你查看 PHPillow 的 SVN,'docs' 文件夹中有更多信息

【讨论】:

PHPillow 与用 PHP 编写 CouchDB 视图有什么关系吗?

以上是关于使用 PHP 为 couchDB 创建视图的主要内容,如果未能解决你的问题,请参考以下文章

CouchDB 视图可访问,但不会运行查询

来自 Ektorp 的 CouchDB Map/Reduce 视图查询

为本地开发采样一个大型 CouchDB 数据库,避免长视图构建

如何使用 javascript 在 couchdb 中使用多个组合键进行查询,而无需为每个组合编写单独的视图?

在 CouchDB 中链接文档

CouchApp 无法从视图中检索键/值对,但 Futon 可以