【问题标题】:Is there a way to use MongoDB query objects to filter regular JavaScript arrays?有没有办法使用 MongoDB 查询对象来过滤常规 JavaScript 数组?
【发布时间】:2012-01-01 21:36:29
【问题描述】:

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

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

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

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

【问题讨论】:

  • 对于 MongoDB 人员来说是个不错的建议,可以将其添加到他们的库中。

标签: javascript mongodb


【解决方案1】:

好的,那就再试一次吧:

sift.js (npm: sift) by Craig Condon 是一个受 MongoDB 启发的数组 过滤库。这有点像下划线的替代品 喜欢 MongoDB 的人。 Sift.js 支持 $in 和 $gt 等运算符, 但也可以根据函数过滤数组,甚至可以使用 数组中深度嵌套的对象。

Craig 提供了一些 Mongo 应该熟悉的示例 用户:

var sift = require('sift');

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

来源(已编辑):每日 JS,但似乎网站已关闭。

【讨论】:

  • 哦,这看起来很完美!很好的发现。谢谢
  • @Emil,这是一个不错的发现.. +1
  • 哇!迄今为止使用过的最好的。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    Underscore.js 是一个很棒的库,可以在 javascript 结构上执行 map/reduce 类的工作。强烈推荐。

    【讨论】:

    • 这些在更现代的浏览器上也可以在Array.prototype 中原生使用。我认为 OP 想要传递一个对象来过滤 Mongo 方式(我猜包括像 $in 这样的原子操作)。
    • 正确,我希望能够使用相同的过滤器来过滤 MongoDB 数据常规 JavaScript 数组
    【解决方案4】:

    您可以使用https://github.com/mirek/node-json-criteria 库,该库可以评估 MongoDB 格式对 JSON 对象的标准查询。

    【讨论】:

      【解决方案5】:

      我认为您不能只在普通 js 数组中使用 mongodb 过滤器。因为你需要了解一个事实

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

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

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

      【讨论】:

        猜你喜欢
        • 2021-03-23
        • 2018-11-08
        • 2022-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-03
        相关资源
        最近更新 更多