什么Javascript库可以针对对象计算类似mongodb的查询谓词

What Javascript library can evaluate MongoDB-like query predicates against an object?

本文关键字:mongodb 谓词 查询 计算 对象 Javascript 什么      更新时间:2023-09-26

是否有一个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。