有没有一个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 对象,并且只匹配单个对象,这将是一个额外的好处.

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

推荐答案

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

现在给出一个很长的答案:这已经是asked and answered before了.重点是:

  • 如果你真的想要Mongo语法,可以使用Sift
  • 如果你想成为更主流的人,像其他人一样使用Underscore.js.它有大量方便的函数,除了它基本上用一种稍微不同的语法完成sift所做的事情之外.
  • 你可能根本不需要任何库——现代浏览器直接在Array prototype上支持许多有用的功能,比如filter().

最后一点是,mongodb-riff似乎在try 做类似的事情,但目前该页面明确表示,它不起作用——可能被放弃了.但他的自述至少有价值:-),他提到了sift和Query Engine,这看起来更成熟,但对我来说太复杂了!

就我个人而言,我将使用下划线,因为现在我第一次研究它,我意识到它有很多我需要的方便的东西,而且我真的只想做一些简单的函数,比如下划线_.find().但我想如果你想做更复杂的mongo类查询,你可以用Sift在更少的地方完成.

Mongodb相关问答推荐

MongoDB:从集合页面数据中提取不同的值

映射数组值并查找每个匹配的集合

在MongoDB Aggregate for My BooksDB中将`$match`放在`$unwin`之前或之后的区别

为什么 mongoose 在 mongodb 中找不到我的数据

聚合管道可以用于更新数据库中的文档吗?

@DynamicPropertySource 未被调用(Kotlin、Spring Boot 和 TestContainers)

如何过滤查找mongodb的结果

在 mongodb 聚合中的阶段之后输出具有序列数字 id 的新集合

PHP 无法加载动态库 (mongo.so)

哪个库最适合用于带有 Scala 的 MongoDB?

无法提取地理键,经度/纬度超出范围

为什么 local.oplog.rs 上每隔几分钟的活动就会锁定 mongo 客户端

MongoDB 是否重用已删除的空间?

如何从 node.js 以编程方式执行 mongodump 命令?

TypeError: object of type 'Cursor' has no len()

没有参考选项的mongoose填充字段

mongodb:upserting:仅在插入文档时设置值

Mongo聚合框架,排序然后分组不起作用

pre save和validate之间的mongoose区别?什么时候用哪一个?

如何从mongoose中的对象 ID 获取创建日期?