我有DocPad文档,如下所示:
---
categories: [{slug: ""}, {slug: ""}, ...]
---
Document content.
如何在meta.category
数组中查询具有预定义slug值的所有文档?
答案 0 :(得分:3)
我们有几种方法可以解决这个问题。
setFilter
https://gist.github.com/4556245
最直接的方法是通过getDocumentsWithCategory
模板帮助程序,它使用查询引擎的setFilter
调用,允许我们指定一个自定义函数(我们的过滤器),它将针对集合中的每个模型执行,基于它的布尔返回值保留模型或将其从集合中删除。
此解决方案的缺点是:
parseAfter
事件https://gist.github.com/4555732
如果我们希望能够获得有关我们可用的所有类别的信息,但仍然需要为每个帖子每次都定义我们的类别,那么我们可以使用parseAfter
事件挂钩我们文档的元数据,将类别提取到全局类别对象中,然后用id引用更新我们文档的类别。
缺点是我们仍然需要冗余的类别信息。
https://gist.github.com/4555641
如果我们只想定义一次类别信息,然后只引用我们帖子中的类别ID,那么这个解决方案是最理想的。
答案 1 :(得分:1)
我设法为docpad.coffee
中的给定slug值“bar”创建一个“foo”集合:
collections:
foo: (database) ->
database.findAllLive().setFilter("search", (model, value) ->
categories = model.get('categories')
return false unless Array.isArray categories
for category in categories
if (category.slug and category.slug == value)
return true
return false
).setSearchString("bar")
但是当我尝试创建一个辅助函数,该函数返回给定数组元(“类别”)的集合,对象的键(“slug”)和值(“bar”):
createCollection: (meta, key, value) ->
result = @getDatabase().createLiveChildCollection()
.setFilter("search2", (model, searchString) ->
objects = model.get(meta)
return false unless Array.isArray objects
for object in objects
if (object[key] and object[key] == searchString)
return true
return false
).setSearchString(value)
当我试着打电话时,我得到一个空集合。
答案 2 :(得分:0)
我没有解决方案,但您是否看过docpad作者博客的source code?有一些查询是否存在元数据对象属性的示例。希望有所帮助!