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

Rub*_*ONO 16 javascript predicate mongodb node.js

是否有一个javascript库,允许我在类似于MongoDB的查询语言的DSL中表达对象谓词?为了清楚大型程序,我希望能够说:

var obj = { 
    a: 1, 
    b: 'abcdefg' 
}, qry = { 
    a: { $gt: 0 }, 
    b: /^abc/ 
}; 

if(query(qry).matches(obj)) { 
    // do something appropriate since 
} 
Run Code Online (Sandbox Code Playgroud)

代替:

var obj = { 
    a: 1, 
    b: 'abcdefg' 
}; 
if(obj.a>0 && qry.b.test(obj.b)) { 
    // do something appropriate 
} 
Run Code Online (Sandbox Code Playgroud)

我正在使用Node.js,因此NPM上的任何内容都会很棒.如果库可以从数组中选择对象以及仅匹配单个对象,那将是一个额外的好处.

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

Fle*_*tch 17

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

现在回答很长的问题:之前已经提出并回答了这个问题.重点是:

  • 如果你真的想要Mongo语法,请使用Sift
  • 如果你想成为更主流,请像其他人一样使用Underscore.js.它有大量方便的功能,除了它基本上做了sift做的略有不同的语法.
  • 你可能不需要任何图书馆都-现代浏览器直接支持许多有用的功能在阵列的原型,像filter()例如.

作为最后一点,mongodb-riff似乎试图做类似的事情,但目前该页明确指出它不起作用 - 也许它已被抛弃.但他的自述文件至少具有价值:-),他提到筛选和查询引擎看起来更成熟,虽然对我来说太复杂了!

我个人会选择Underscore,因为现在我已经第一次看了它,我意识到它有很多我需要的方便的东西,而且我真的只想做像_.find()Underscore中那样的简单功能.但我想如果你想做更复杂的mongo式查询,你可以用较少的LOC用Sift来做.


kof*_*asa 8

看看明戈

我找不到合适的替代方案后实施了它.

它仍在积极开发中,但可以使用.测试覆盖范围尚未完成.

可从浏览器和nodejs使用

[编辑]

这个库现在是MongoDB前端查询语言最完整的实现.