我真的很喜欢 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/