有没有办法使用MongoDB查询对象来过滤常规JavaScript数组?

时间:2012-01-01 21:36:30

标签: javascript mongodb

在MongoDB中,您可以使用JSON样式的对象(如下所示)来查询集合:

db.things.find({ x : { $ne : 3 }, y : 'foo' });

我想重用那个{ x : { $ne : 3 }, y : 'foo' }位并用它来过滤JavaScript对象数组。

是否有任何代码/库可以做到这一点,并且支持所有查询选项(或者无论如何都有意义)?

5 个答案:

答案 0 :(得分:8)

好的,所以这是另一次尝试:

  Craig Condon的

sift.js(npm:sift)是一个受MongoDB启发的阵列   过滤库。它有点像Underscore的替代品   喜欢MongoDB的人。 Sift.js支持$ in和$ gt等运算符,   但也可以根据功能过滤数组,甚至可以使用   数组中深层嵌套的对象。

     

Craig提供了一些看起来很熟悉Mongo的例子   用户:

var sift = require('sift');

sift({ $in: ['hello','world'] }, ['hello','sifted','array!']); //
['hello']

来源:http://dailyjs.com/2012/01/04/node-roundup/

答案 1 :(得分:3)

据我所知,Mingo比Sift有更广泛的Mongo查询支持。

答案 2 :(得分:2)

Underscore.js是一个很棒的库,用于在javascript结构上映射/减少作业类型。强烈推荐。

答案 3 :(得分:1)

我不认为你可以在普通的js数组中使用mongodb过滤器。因为你需要了解

的事实
  

评估mongodb中指定的过滤器   mongodb索引不在javascript结果集中

表示过滤器被评估(翻译)以查询索引而不是js。所以你要问的是在mongodb(或JS)之上的DSL,它将评估JS数组中的mongodb索引过滤器。

我不认为它需要它,因为它们都有不同的用途(虽然它可能(很难)编写自定义DSL)。还有像underscore.js这样的主要框架已经提供了处理这些的方法。

答案 4 :(得分:1)

您可以使用https://github.com/mirek/node-json-criteria库,它在JSON对象上以MongoDB格式评估critera查询。