Javascript 如何基于对象数组在docpad中查询文档
我的DocPad文档如下所示:Javascript 如何基于对象数组在docpad中查询文档,javascript,node.js,docpad,query-engine,Javascript,Node.js,Docpad,Query Engine,我的DocPad文档如下所示: --- categories: [{slug: ""}, {slug: ""}, ...] --- Document content. 我如何查询所有在meta.category数组中具有预定义slug值的文档?我没有一个下拉式解决方案,但是您看过docpad作者的博客吗?有一些查询元数据对象属性是否存在的示例。希望有帮助 我没有现成的解决方案,但是你看过docpad作者的博客吗?有一些查询元数据对象属性是否存在的示例。希望有帮助 我在docpad.coffe
---
categories: [{slug: ""}, {slug: ""}, ...]
---
Document content.
我如何查询所有在
meta.category
数组中具有预定义slug值的文档?我没有一个下拉式解决方案,但是您看过docpad作者的博客吗?有一些查询元数据对象属性是否存在的示例。希望有帮助 我没有现成的解决方案,但是你看过docpad作者的博客吗?有一些查询元数据对象属性是否存在的示例。希望有帮助 我在docpad.coffee
中为给定的slug value“条创建了一个“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")
但是,当我尝试创建一个helper函数,该函数返回给定对象的数组meta(“categories”)、键(“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)
当我试图调用它时,会得到一个空集合。我设法为docpad中的给定slug-value”条创建一个“foo”集合。coffee
:
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")
但是,当我尝试创建一个helper函数,该函数返回给定对象的数组meta(“categories”)、键(“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)
当我试图调用它时,会得到一个空的集合。我们有几种方法可以解决这个问题 通过模板助手和查询引擎的
setFilter
最直接的方法是通过getDocumentsWithCategory
模板帮助器,它使用查询引擎的setFilter
调用,允许我们指定自定义函数(我们的过滤器)这将针对集合中的每个模型执行,并基于其布尔返回值保留该模型或将其从集合中移除
此解决方案的缺点是:
- 我们必须在每个帖子中重新定义我们的类别信息
- 我们无法立即获得所有可用类别的信息
parseAfter
事件
如果我们希望能够获得所有可用类别的信息,但仍然需要每次为每个帖子定义类别,那么我们可以使用parseAfter
事件连接到文档的元数据中,将类别提取到全局类别对象中,然后用id引用更新文档的类别
缺点是我们仍然需要冗余的类别信息
通过模板帮助程序和全局类别列表
如果我们只想定义一次类别信息,然后只引用帖子中的类别ID,那么这个解决方案是最理想的。有几种方法可以实现这一点 通过模板助手和查询引擎的
setFilter
最直接的方法是通过getDocumentsWithCategory
模板帮助器,它使用查询引擎的setFilter
调用,允许我们指定自定义函数(我们的过滤器)这将针对集合中的每个模型执行,并基于其布尔返回值保留该模型或将其从集合中移除
此解决方案的缺点是:
- 我们必须在每个帖子中重新定义我们的类别信息
- 我们无法立即获得所有可用类别的信息
parseAfter
事件
如果我们希望能够获得所有可用类别的信息,但仍然需要每次为每个帖子定义类别,那么我们可以使用parseAfter
事件连接到文档的元数据中,将类别提取到全局类别对象中,然后用id引用更新文档的类别
缺点是我们仍然需要冗余的类别信息
通过模板帮助程序和全局类别列表
如果我们只想定义一次类别信息,然后只引用帖子中的类别ID,那么这个解决方案是最理想的。是的,这是一个查询。但我的问题不是元数据属性的存在。在我的例子中,属性实际上是未知数量的对象,我对它们的属性感兴趣。是的,这是一个查询。但我的问题不是元数据属性的存在。在我的例子中,属性实际上是一个未知数量的对象,我对它们的属性很感兴趣。我一直在尝试这个方法,但是因为错过了model.get方法而被卡住了。我一直在尝试创建一个helper函数,所以我甚至没有尝试过静态(?)集合版本。不同的是,我只需要提供
searchString
,因为对我来说,meta总是categories,key总是slug。我将试着调试它,看看是否能正常工作。我无论如何都要回去报到。谢谢。这很有趣。我一直在尝试这个方法,但是因为错过了model.get方法而被卡住了。我一直在尝试创建一个helper函数,所以我甚至没有尝试过静态(?)集合版本。不同的是,我只需要提供searchString
,因为对我来说,meta总是categories,key总是slug。我将试着调试它,看看是否能正常工作。我无论如何都要回去报到。谢谢