是否有一个javascript库允许我在类似于MongoDB的查询语言的DSL中表达对象谓词?为了在大型程序中清晰起见,我希望能够这样说:
var obj = {
a: 1,
b: 'abcdefg'
}, qry = {
a: { $gt: 0 },
b: /^abc/
};
if(query(qry).matches(obj)) {
// do something appropriate since
}
代替:
var obj = {
a: 1,
b: 'abcdefg'
};
if(obj.a>0 && qry.b.test(obj.b)) {
// do something appropriate
}
我正在使用Node.js,所以NPM上的任何东西都会很棒。如果库可以从数组中选择对象以及匹配单个对象,那将是一个额外的好处。
我回顾了这两个相关的问题,但它们对我的情况没有特别的帮助:
- 实现类gomongodb查询表达式对象求值
- 在PHP中评估类mongodb JSON查询
我找到了答案:Sift.js
现在是长篇大论的回答:这个问题以前已经被问过了。重点是:
- 使用Sift如果你真的想要Mongo语法
- 如果你想更主流,像其他人一样使用Underscore.js。它有很多方便的函数,除了它基本上做了sift所做的事情,只是语法略有不同。
- 你可能根本不需要任何库——现代浏览器直接在Array原型上支持许多有用的函数,比如
filter()
。
最后要说明的是,mongodb-riff似乎也在尝试做类似的事情,但目前页面上清楚地表明它不起作用——也许它已经被抛弃了。但他的自述至少是有价值的:-),他提到了筛选和查询引擎,看起来更成熟,虽然对我来说太复杂了!
就我个人而言,我将使用下划线,因为现在我第一次研究它,我意识到它有很多我需要的方便的东西,加上我真的只想做简单的函数,比如下划线中的_.find()
。但我猜如果你想做更复杂的蒙古式查询,你会用更少的LOC与Sift。
查看Mingo
在没有找到合适的替代方案后,我实现了它。
它仍在积极开发中,但可用。测试覆盖不完整。
可在浏览器和nodejs中使用
[编辑]这个库是MongoDB最完整的前端查询语言实现。
https://github.com/mirek/node-json-criteria库正是这样做的-使用MongoDB查询格式评估JSON对象的标准查询。
lodash.js
你想使用lodash.js。它取代了underscore.js。性能是原来的两倍。
http://lodash.com/我能找到的最接近的是LINQ .js,这是JavaScript的LINQ。