1

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

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

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

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

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

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

我还是沙发新手,还有阅读要做。但这是困扰我的事情,我正试图绕过它。由于我想到的产品将根据最终用户的输入进行高度动态化。

应用程序本身将用 python 编写

4

1 回答 1

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

为了克服在实时数据库上更新视图的缺点,
您还可以创建一个新的设计(视图)文档。
因此,至少您现有的代码和视图不会受到影响。

只有在创建新视图后,您才能部署最新代码以切换到此新视图,
并且可以停用旧视图。

于 2013-03-28T08:58:44.270 回答