17

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

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

4

5 回答 5

18

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

现在长答案:这已经被问过并回答过。重点是:

  • 如果你真的想要 Mongo 语法,请使用 Sift
  • 如果您想更主流,请像其他人一样使用Underscore.js。除了它基本上完成 sift 的功能之外,它还有许多方便的功能,但语法略有不同。
  • 您可能根本不需要任何库 - 现代浏览器直接在Array 原型上支持许多有用的功能,filter()例如。

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

就我个人而言,我将使用 Underscore,因为现在我第一次研究它,我意识到它有很多我需要的方便的东西,而且我真的只想做一些简单的功能,比如_.find()在 Underscore 中的功能. 但我想如果你想做更复杂的类似 mongo 的查询,你会用 Sift 在更少的 LOC 中完成。

于 2013-03-20T15:58:18.280 回答
9

看看明哥

在没有找到合适的替代方案后,我实施了它。

它仍在积极开发中,但可以使用。测试覆盖不完整。

可从浏览器和 nodejs 使用

[编辑]

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

于 2013-10-22T15:56:03.810 回答
2

https://github.com/mirek/node-json-criteria库正是这样做的——使用 MongoDB 查询格式评估对 JSON 对象的条件查询。

于 2014-10-12T11:12:12.490 回答
1

lodash.js

你想使用 lodash.js。它是 underscore.js 的替代品。性能快了两倍。

http://lodash.com/

于 2013-08-08T03:20:08.280 回答
0

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

于 2013-03-13T23:50:20.317 回答