【问题标题】:Javascript Query Selectors DSL as an Independent LibraryJavascript 查询选择器 DSL 作为一个独立的库
【发布时间】:2013-04-24 03:03:21
【问题描述】:

我真的很喜欢 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。 那么,你对这种功能有什么了解吗?

【问题讨论】:

  • 谢谢@Bender。我现在意识到这个问题已经被问到stackoverflow.com/questions/15397668/… 并且那里也提出了 linq。这不是我真正想要的。
  • 好的,所以我找到了一些我想做的事情 crcn/sift.js Craig Condon。
  • 这个问题的标题有点误导,听起来你想让图书馆做querySelector之类的事情。您可能想按照“有 JavaScript 对象查询语言吗?”的方式重写它。什么的。

标签: javascript json node.js mongodb dsl


【解决方案1】:

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

  • Benjamin Arthur Lupton 的 query-engine,功能丰富
  • Craig Condon 的 sift,轻量级

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-01
    相关资源
    最近更新 更多