什么样的Javascript库可以评估对象的MongoDB-like查询谓词?
是否有一个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上的任何东西都会很棒。 如果库可以从数组中select对象以及匹配单个对象,那将是额外的好处。
我回顾了这两个相关的问题,但是他们对我的情况并没有特别的帮助:
- 实现goMongoDB-like查询expression式对象评估
- 在PHP中评估类似MongoDB的JSON查询
好的,我find了答案: Sift.js
现在回答这个问题:这个问题已经被问到过了 。 要点是:
- 如果你真的想要Mongo语法,请使用Sift
- 如果你想成为主stream,像其他人一样使用Underscore.js 。 除了基本上做了一些稍微不同的语法筛选之外,它还有许多方便的函数。
- 您可能根本不需要任何库 – 现代浏览器直接在Array原型上支持许多有用的function,例如
filter()
。
作为最后一点, mongodb-riff似乎正在尝试做类似的事情,但是目前该页面清楚地表明它不起作用 – 可能已经被放弃了。 但他的自述至less是有价值的:-),他提到筛选和查询引擎 ,看起来更成熟,但对我来说太复杂了!
就我个人而言,我打算用Underscore去做,因为现在我已经第一次研究它了,我意识到它有我需要的一些方便的东西,再加上我只是想做一些简单的function,比如什么是_.find()
在Underscore中。 但是我想如果你想做更复杂的类似Mongo的查询,你可以在Sift中使用更less的LOC。
退房明戈
我没有find合适的替代scheme后实施它。
它仍在积极开发中,但是可用。 testing覆盖不完整。
可以从浏览器和nodejs中使用
[编辑]
这个库现在是前端最完整的MongoDB查询语言实现。
https://github.com/mirek/node-json-criteria库做的确如此 – 使用MongoDB查询格式评估对JSON对象的条件查询。
我能find的最接近的是linq.js ,这是LINQ for JavaScript。 希望这会对你有所帮助。