MongoDB 上的 JSONPath 查询?

JSONPath query on MongoDB?

我们有 User 数据存储到 MongoDB 中。客户端提供一个 JSONPath 查询以请求筛选的用户集。

例如:

$.users[@.salary > 10000]

是一个 JSONPath 查询,用于检索薪水大于 10000 的用户。

数据:

   "users": [ {
      "firstName": "John",
      "lastName" : "doe",
      "age"      : 26,
      "salary"   : 5000, 
      "address"  : {
        "streetAddress": "naist street",
        "city"         : "Nara",
        "postalCode"   : "630-0192"
      },
      "phoneNumbers": [
        {
          "type"  : "iPhone",
          "number": "0123-4567-8888"
        },
        {
          "type"  : "home",
          "number": "0123-4567-8910"
        },
        ........
      ]
    }

然而,Mongo相同的查询将是:

db.inventory.find( { salary: { $gt: 10000 } })

我们在 Java 中有我们的应用程序代码,它连接到 MongoDB。

有什么方法可以 运行 这个 JSONPath 查询直接到 MongoDB ??

使用 Mongo 查询意味着将 JSONPath 查询转换为 Mongo 查询,这在代码中转换起来会很麻烦。一个非常强力的方法是首先在 AS(应用程序)上获取所有用户,然后将 List<Document> 转换为 Json 字符串,然后 运行 JSONPath 查询。

如有任何帮助,我们将不胜感激。

现阶段无法开箱即用 - 请参阅此开放请求:https://jira.mongodb.org/browse/SERVER-736

我个人会建议您采用某种翻译方法 - 这是我看到的唯一可行的选择,除了无法扩展的蛮力客户端评估(但对于小型应用程序可能非常合适)数据集)。此外,您需要翻译查询的代码可以很好地进行单元测试,因此它应该是一个相当安全的选择。

这里有一些关于在哪里 source/base 所需翻译代码 from/on 的想法。

基于正则表达式和解析(专门针对 MongoDB):https://github.com/gabrielelana/mongodb-shell-extensions/blob/master/src/jsonpath.js

或者,这可能用于将 JSONPath 字符串解析为对象模型,然后您可以将其转换为 MongoDB 查询:https://github.com/json-path/JsonPath