Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何基于对象数组在docpad中查询文档_Javascript_Node.js_Docpad_Query Engine - Fatal编程技术网

Javascript 如何基于对象数组在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

我的DocPad文档如下所示:

---
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。我将试着调试它,看看是否能正常工作。我无论如何都要回去报到。谢谢