在MongoDB上进行JSONPath查询?

时间:2018-07-06 10:33:10

标签: json mongodb mongodb-query jsonpath

我们已将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"
        },
        ........
      ]
    }

与此相同,MongoQuery则为:

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

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

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

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

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

在此阶段,不能开箱即用-请参见以下打开请求:https://jira.mongodb.org/browse/SERVER-736

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

以下是一些有关从何处获取/翻译所需翻译代码的想法。

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

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