1

我真的很喜欢 mongodb 的 json dsl 来查询数据库。我想知道是否有任何独立的 node.js/browser 库可以将这种 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。那么,你对这种功能有什么了解吗?

4

1 回答 1

0

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

  • Benjamin Arthur Lupton 的查询引擎,功能丰富
  • Craig Condon 的筛子,轻量级

为了产生我的布尔返回函数,我写了这个(使用 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

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

于 2013-04-24T04:38:41.823 回答