作为独立库的 Javascript 查询选择器 DSL

标签 javascript json node.js mongodb dsl

我真的很喜欢 mongodb 的 json dsl 来查询数据库。 我想知道是否有任何独立的 Node.js/浏览器库可以将这种 json 表达式转换为可以应用于某些上下文对象的 js 函数。

这就是我的意思。假设您有以下表达式:

{
  "context.user.age": { "$gte": 30, "$lte": 40 },
  "context.user.hobby": { "$in": ["swimming", "running"] }
}

这可以翻译成js函数:

var f = function (context) {
  // @return {Boolean}
  return (context.user.age >= 30) &&
         (context.user.age <= 40) &&
         (['swimming', 'running'].indexOf(context.user.hobby) >= 0)
}

我需要这个,因为我正在构建自己的 DSL。 那么,您知 Prop 有此类功能的东西吗?

最佳答案

至少有两个库执行与问题正文中描述的类似或易于调整的功能。

  • 本杰明·阿瑟·勒普顿的 query-engine ,功能丰富
  • 克雷格·康登的 sift ,轻量级

为了生成我的 bool 返回函数,我编写了这个(使用 sift):

   parseCondition = (condition) ->
        ###
            @param {Object} condition - a condition statement written in swift.
            @return {Function} - condition fn to be applied on a context
                                 which will return a Boolean.
            @see https://github.com/crcn/sift.js
        ###
        return (context) ->
            [expectedContext] = swift condition, [context]
            return expectedContext is context

我传入上下文对象并检查返回的对象是否相同。如果是,则条件已通过。

关于作为独立库的 Javascript 查询选择器 DSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16182652/

相关文章:

javascript - jquery 或 javascript 图像 onclick div fadein/link onclick div fadeout

javascript - 获取白银或黄金汇率

javascript - 代码错误,缺少 JS 基础知识

javascript - BackboneJS - 显示 JSON 数据

arrays - swift 2.0 : Json Array Parsing errors

Javascript获取对象数组中的最大对象

PHP JSON API - 检测返回值的数据类型

node.js - TSC 找不到全局对象的名称

javascript - 仅 GET/POST 模型 Sails.js 的优势

javascript - 为什么我无法删除使用 Node 的 exec 函数添加的换行符?