是否有一个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上的任何内容都会很棒。如果库可以从数组中选择对象以及仅匹配单个对象,那将是一个额外的好处。
我回顾了这两个相关的问题,但对我的情况并没有特别的帮助:
答案 0 :(得分:16)
好的,我找到了答案:Sift.js
现在答案很长:这是asked and answered before。重点是:
filter()
。作为最后一点,mongodb-riff似乎试图做类似的事情,但目前页面明确指出它不起作用 - 也许它已被抛弃。但他的自述文件至少具有价值:-),他提到筛选和Query Engine看起来更成熟,虽然对我来说太复杂了!
我个人会选择Underscore,因为现在我第一次看了它,我意识到它有很多我需要的方便的东西,而且我真的只想做简单的功能,比如说在Underscore中_.find()
。但我想如果你想做更复杂的类似mongo的查询,你可以用Sift来减少LOC。
答案 1 :(得分:8)
查看Mingo
我在找不到合适的替代方案后实施了它。
它仍在积极开发中,但可以使用。测试覆盖范围尚未完成。
可从浏览器和nodejs使用
[编辑]
这个库现在是MongoDB前端查询语言最完整的实现。
答案 2 :(得分:2)
https://github.com/mirek/node-json-criteria库正是这样做的 - 使用MongoDB查询格式评估JSON对象的条件查询。
答案 3 :(得分:1)
答案 4 :(得分:0)
我能找到的最接近的是linq.js,它是用于JavaScript的LINQ。希望这对你有所帮助。