CouchDB - 如何基于最终用户输入创建动态设计文档

时间:2013-03-28 08:49:23

标签: python drupal couchdb

我一直在阅读更多有关CouchDB的内容,并且非常喜欢它(主要:主复制是我想要使用它的主要原因之一)。

然而,我有一个询问你们的问题......我从php开始,经常使用Drupal CMS。我最喜欢的一个(可能是整个drupal社区)是由MerlinOfChaos编写的'Views'插件。这个想法是管理员可以使用ui系统的视图,从数据库中创建动态的内容流。该内容可以来自任何内容类型(博客文章,文章,用户,图像等),并且可以被过滤,排序,以网格排列等等。一个简单的示例是为动画滑块创建内容源。管理员可以随时进入并更改其中显示的内容。虽然我通常会将其设置为最近最近的内容类型X.

所以有了类似mongo的东西,我可以看看如何做到这一点。一个相当高级的解析器,然后将管理员想要的内容转换为数据库查询。由于mongo都基于动态查询,因此非常可行。但是,我想用沙发。

我已经看到我可以创建一个带有参数的视图,并根据该视图返回结果(例如您要显示的5篇文章ID的参数)。但是,如果我希望能够从UI构建更高级的东西呢?我会添加更多参数吗?例如,假设创建的视图选择值为'contentType'='post'的所有文档,参数为id / page title。但是,如果我希望最终用户也能够选择视图查询的内容类型,该怎么办呢?或者,只要内容类型是3个不同的值之一,最近的5篇文章是什么?

这让我想到的另一件事是,一旦这样的视图被创建并保存到数据库中,并且第一次被调用,它会花时间来构建结果。你会在生产/现场系统上这样做吗?

部分想法是,我希望最终用户能够根据网站上的文章和帖子在其个人资料页面上创建自定义内容Feed。并且能够过滤它们并制作自己的类别,以便说出并标记它们。比如他们的'技术'饲料,以及他们的'食物'饲料。

我还是新来的沙发,仍然有阅读要做。但这是让我烦恼的事情,我试图绕过它。因为我想到的产品将根据最终用户的输入而变得非常动态。

应用程序本身将用python编写

1 个答案:

答案 0 :(得分:1)

简而言之,您需要在视图中发出类似的内容:

emit([doc.contentType, doc.addDate], doc); // emit the entire doc, 
// add date is timestamp (assuming)

emit([doc.contentType, doc.addDate], null); // use with include_docs=true

然后,当您需要获取列表时:

startkey=["post",0]&endkey=["post",999999999]&limit=5&descending=true

说明:

startkey   = ["post",0] = contentType is post, and addDate >= 0
endkey     = ["post",9999999999] = contentType is post, and addDate <= 9999999999
limit      = 5, limit to five posts
descending = true = sort descending, which is sort by adddDate descending

要克服更新实时数据库视图的缺点,
你也可以创建一个新的设计(视图)doc 因此,至少您的现有代码和视图不会受到影响。

仅在创建新视图后, 您部署最新代码以切换到此新视图,
你可以退出旧观点。