什么Javascript库可以针对对象评估类似MongoDB的查询谓词?

时间:2013-03-13 22:24:04

标签: javascript node.js mongodb predicate

是否有一个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上的任何内容都会很棒。如果库可以从数组中选择对象以及仅匹配单个对象,那将是一个额外的好处。

我回顾了这两个相关的问题,但对我的情况并没有特别的帮助:

5 个答案:

答案 0 :(得分:16)

好的,我找到了答案:Sift.js

现在答案很长:这是asked and answered before。重点是:

  • 如果您真的想要Mongo语法,请使用Sift
  • 如果您想要更加主流,请像其他人一样使用Underscore.js。除了基本上用sift略有不同的sift做的事实之外,它还有很多方便的功能。
  • 您可能根本不需要任何库 - 现代浏览器直接在Array prototype上支持许多有用的功能,例如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)

lodash.js

您想使用lodash.js。它替代了underscore.js。 性能提高了两倍。

http://lodash.com/

答案 4 :(得分:0)

我能找到的最接近的是linq.js,它是用于JavaScript的LINQ。希望这对你有所帮助。